压碎的子图不占据整个情节

时间:2015-11-04 11:00:04

标签: python matplotlib plot subplot colorbar

我不知道为什么,但我的次要情节完全被粉碎,而不是占据整个情节。

另外,我希望子图有相同的长度和颜色条。这里看起来前2个子图比第3个短,因为颜色条更大。

理想情况下,我希望得到这样的结果: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

1 个答案:

答案 0 :(得分:1)

您似乎需要为aspect=False个实例设置ImageGrid see the docs for ImageGrid here)[h / t @daryl]

  

方面

     

默认情况下(False),网格中轴的宽度和高度是独立缩放的。如果为True,则根据其数据限制进行缩放(类似于mpl中的aspect参数)。

获取您的代码,并将aspect=False添加到grid_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()