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

时间:2014-04-07 12:36:04

标签: python matplotlib subfigure

使用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()

结果如下:

result

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

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

我阅读了文档,并在matplotlib.org上查看了examples。有一些示例显示了如何调整单个grid[n]的大小,但我找不到任何显示如何调整grid大小的示例。有没有人有任何指示?

1 个答案:

答案 0 :(得分:0)

对我来说,指定数字大小有帮助:

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)

结果:

Seems like it maintained the aspect ratio