2015-11-04 32 views
0

我不知道爲什麼,但是我的小地塊被完全壓碎而不是佔據整個地塊。被壓碎的小塊土地不佔據整個地塊

此外,我希望子圖具有相同的長度和顏色條。這裏看起來前兩個子圖比第三個小,因爲色條更大。

理想情況下,我想這樣的結果:https://stackoverflow.com/questions/33517915/very-low-quality-result-with-imshow-and-colorbar 但質量pcolormesh(imshow是一個非常糟糕的質量),並與2個顏色條。

這裏是我的代碼:

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1 import ImageGrid 

fig = plt.figure() 

grid_top = ImageGrid(fig, 211, nrows_ncols = (2, 1), 
        cbar_location = "right",      
        cbar_mode="single", 
        cbar_pad=.2) 
grid_bot = ImageGrid(fig, 212, nrows_ncols = (1, 1), 
        cbar_location = "right",      
        cbar_mode="single", 
        cbar_pad=.2) 

im1 = grid_top[0].pcolormesh(np.arange(0,len(array1[0])),np.arange(0,len(array1)+1),array1, vmin=0, vmax=0.8) 
im2 = grid_top[1].pcolormesh(np.arange(0,len(array2[0])),np.arange(0,len(array2)+1),array2, vmin=0, vmax=0.8) 
im3 = grid_bot[0].pcolormesh(np.arange(0,len(array3[0])),np.arange(0,len(array3)+1),array3, vmin=-0.5, vmax=0.5, cmap='seismic') 

grid_top.cbar_axes[0].colorbar(im1) 
grid_bot.cbar_axes[0].colorbar(im3) 

plt.show() 

這裏的結果,它爲什麼這麼打下去,爲什麼次要情節並不佔據整個情節?

enter image description here

+0

嘗試'pcolormesh(...,縱橫= '自動')' – plonser

+0

有pcolormesh中沒有屬性「aspect」。我在pcolormesh後嘗試了plt.gca()。set_aspect('auto'),但沒有任何改變。 – GeoffreyB

+0

嘗試在ImageGrid(...)上設置'aspect = False' – daryl

回答

1

看起來你需要設置aspect=FalseImageGrid實例(see the docs for ImageGrid here)H/T @daryl]

方面

默認情況下(假),寬度和網格中的座標軸高度是獨立縮放的。如果爲True,則根據其數據限制進行縮放(與mpl中的方面參數類似)。

以你的代碼,並添加aspect=Falsegrid_topgrid_bot,產生這樣的:

enter image description here

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1 import ImageGrid 

fig = plt.figure() 

grid_top = ImageGrid(fig, 211, nrows_ncols = (2, 1), 
        cbar_location = "right",      
        cbar_mode="single", 
        cbar_pad=.2, 
        aspect=False) 
grid_bot = ImageGrid(fig, 212, nrows_ncols = (1, 1), 
        cbar_location = "right",      
        cbar_mode="single", 
        cbar_pad=.2, 
        aspect=False) 

# Some random data so the script will run 
array1=np.random.rand(10,250) 
array2=np.random.rand(10,250) 
array3=np.random.rand(10,250) 

im1 = grid_top[0].pcolormesh(np.arange(0,len(array1[0])),np.arange(0,len(array1)+1),array1, vmin=0, vmax=0.8) 
im2 = grid_top[1].pcolormesh(np.arange(0,len(array2[0])),np.arange(0,len(array2)+1),array2, vmin=0, vmax=0.8) 
im3 = grid_bot[0].pcolormesh(np.arange(0,len(array3[0])),np.arange(0,len(array3)+1),array3, vmin=-0.5, vmax=0.5, cmap='seismic') 

grid_top.cbar_axes[0].colorbar(im1) 
grid_bot.cbar_axes[0].colorbar(im3) 

plt.show()