2014-09-21 178 views
2

我厭倦了matplotlib,因爲它很難繪製指定大小的圖像。如何設置imshow比例

我有32 * 32,20 * 20大小的兩個圖像。我只想繪製它們的原始大小,或者與原始大小成比例。

在SO讀了不少帖子後,我正在使用的代碼是現在

plt.autoscale(False) 
plt.subplot(1, 2, 1); 
plt.imshow(img_blob[0, 0, :, :], cmap='gray', 
      interpolation='nearest', extent=[0, 32, 0, 32]) 
plt.subplot(1, 2, 2); 
plt.imshow(output_blob[0, 0, :, :], cmap='gray', 
      interpolation='nearest', extent=[0, 20, 0, 20]) 
plt.show() 

但兩個圖像仍然顯示在相同的尺寸。

enter image description here

我figsize試圖

plt.subplot(1, 2, 2, figsize=(2.0, 2.0)); 

但顯然沒有figsize屬性。

是否有可能使兩個不同大小的子圖?

+0

你可以發佈你的Matplotlib版本嗎?我在計算機上覆制並粘貼了兩個本地圖像的代碼,並將它們繪製爲原始大小,因此我無法重現您的行爲。我正在使用1.4.0。 – 2014-09-22 08:14:59

+0

我該怎麼做?用點子? – SolessChong 2014-09-24 08:09:57

+0

不要在你的問題中寫明知不正確的代碼。 – Dmitry 2017-09-04 21:40:58

回答

1

如果圖像比例非常重要,您也可以使用imshow的替代方法...有一種叫做figimage的功能,它可以向您的身材顯示完全非重新取樣的圖像。對它進行處理有點費力 - 它不會在幕後做很多事情來讓你的生活更輕鬆 - 但在某些情況下它可能會有用。這裏是使用你的例子

import matplotlib.pyplot as plt 
import numpy as np 

x = np.linspace(0,1,20) 
z1 = x[:,np.newaxis] * x 
y = np.linspace(0,1,32) 
z2 = y[:,np.newaxis] * y 

fig = plt.figure(figsize=(2,1)) 
plt.figimage(z1, 25, 25, cmap='gray') # X, Y offsets are in pixels 
plt.figimage(z2, 75, 25, cmap='gray') 

plt.show() 
1

您可以使用GridSpec做不同尺寸的地塊。 由於GridSpec需要從原始圖形矩形創建相同大小的網格單元,因此您必須自己計算比例,然後指定單元跨度以填充正確的空間。

爲您具體的例子:

import matplotlib.pyplot as plt 
ax1 = plt.subplot2grid((3,6), (0,0), colspan=3, rowspan=3) 
ax2 = plt.subplot2grid((3,6), (0,3), colspan=2, rowspan=2) 

如果你現在使用繪製AX1和AX2,它應該保持相對的縱橫比正確的(也給出一個正確的數字大小)。不過,應該可以寫出一個方法來自動完成這些計算。