Python 使用Matplotlib中的ImageGrid时如何调整子图形的大小

Python 使用Matplotlib中的ImageGrid时如何调整子图形的大小,python,matplotlib,subfigure,Python,Matplotlib,Subfigure,使用Python和Matplotlib,我试图生成一个由两个子图形组成的图形,每个子图形包含一组带有公共颜色条的绘图。我几乎所有的东西都在工作。我唯一无法理解的部分是如何使顶部和底部子批次具有相同的宽度-即4x2网格+颜色栏应具有与2x1网格+颜色栏相同的宽度。左下角的图像与其他图的形状不同,这是经过深思熟虑的 以下是我的代码: import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import AxesGrid, ImageG

使用Python和Matplotlib,我试图生成一个由两个子图形组成的图形,每个子图形包含一组带有公共颜色条的绘图。我几乎所有的东西都在工作。我唯一无法理解的部分是如何使顶部和底部子批次具有相同的宽度-即4x2网格+颜色栏应具有与2x1网格+颜色栏相同的宽度。左下角的图像与其他图的形状不同,这是经过深思熟虑的

以下是我的代码:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import AxesGrid, ImageGrid
from numpy.random import rand

fig = plt.figure(1)

grid1 = ImageGrid(fig, 211,
                nrows_ncols = (2, 4),
                axes_pad = 0.07,
                share_all=True,
                label_mode = "L",
                cbar_location = "right",
                cbar_mode="single",
                cbar_size="7%",
                cbar_pad="7%",
                aspect = True
                )

for n in range(8):
    im = grid1[n].imshow(rand(10,10),interpolation="nearest")

grid1.axes_all

cb1 = grid1.cbar_axes[0].colorbar(im)
cb1.set_label_text('subfig 1')

grid2 = ImageGrid(fig, 212,
                nrows_ncols = (1, 2),
                axes_pad = 0.1,
                label_mode = "L",
                share_all = False,
                cbar_location="right",
                cbar_mode="single",
                cbar_size="7%",
                cbar_pad="7%",
                aspect = True
                )

im = grid2[0].imshow(rand(10,15),interpolation="nearest")
im = grid2[1].imshow(rand(10,10),interpolation="nearest")

cb2 = grid2.cbar_axes[0].colorbar(im)
cb2.set_label_text('subfig 2')

plt.figtext(0.05,0.85,'(a)',size=20)
plt.figtext(0.05,0.45,'(b)',size=20)

plt.show()
结果如下:

实际的绘图是图像,因此我必须为每个绘图保持正确的纵横比

我认为缺少的步骤是访问每个子地块(不是子地块)的轴,但我不知道如何做到这一点


我通读了文档并查看了matplotlib.org。有一些示例显示如何调整单个
网格[n]
的大小,但我找不到任何示例显示如何调整
网格的大小。有人有任何指针吗?

对于我来说,指定一个数字大小有助于:

fig = plt.figure(1, (6., 6.))
我还必须更改figtext的位置:

plt.figtext(0.0,0.85,'(a)',size=20)
plt.figtext(0.0,0.45,'(b)',size=20)
结果:


这很有趣。图形大小和绘图大小之间存在一定的差异。当我按照你的建议添加体型时,效果非常好。但是如果我使用更大的尺寸(例如(20,20)),我会回到同样的问题。看起来你必须确保给定的图形大小小于绘图大小,我想这会在某个地方触发一些重新计算。感谢您的回答-我现在可以制作出我所希望的美丽的数字:-)