我不知道为什么,但我的次要情节完全被粉碎,而不是占据整个情节。
另外,我希望子图有相同的长度和颜色条。这里看起来前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()
这里结果,为什么它如此粉碎,以及为什么子图不占据整个情节?
答案 0 :(得分:1)
您似乎需要为aspect=False
个实例设置ImageGrid
see the docs for ImageGrid here)[h / t @daryl]
方面
默认情况下(False),网格中轴的宽度和高度是独立缩放的。如果为True,则根据其数据限制进行缩放(类似于mpl中的aspect参数)。
获取您的代码,并将aspect=False
添加到grid_top
和grid_bot
,产生以下结果:
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()