子图中的子图 - 两个8x8的子图

3
我正在尝试创建两个子图中的子图,以显示不同尺寸的图像。
主图将分为两个绘图区域 - 每个绘图区域将进一步分为8x8个小绘图区域。我不想显示任何坐标轴。
因此,我将有两个子图,每个子图显示64个图像(64个小绘图区域)。
似乎我需要使用gridspec,但我不知道如何在gridspec中使用axes.flatten。 axes.flatten可以让我将64个图像显示在一个图上。
gs0 = gridspec.GridSpec(1, 2)

gs00 = gridspec.GridSpecFromSubplotSpec(8, 8, subplot_spec=gs0[0])
gs01 = gridspec.GridSpecFromSubplotSpec(8, 8, subplot_spec=gs0[1])

我不知道如何将下面的代码与 gridspec 结合起来,创建子图。

fig, axes = plt.subplots(nrows=8, ncols=8,figsize = (12,6))

  for ax,image in zip(axes.flat,images):
            ax.axes.set_axis_off()
            ax.imshow(imread(image))
plt.show()
1个回答

9
简而言之:你不需要。 pyplot.subplots是一个顶级函数,其主要目的是为了方便。
如果你想得到你想要的内容,你需要深入API中去一点,但不需要太深。
from matplotlib import pyplot
from matplotlib import gridspec

fig = pyplot.figure(figsize=(24, 12))

gs0 = gridspec.GridSpec(1, 2)
gs00 = gridspec.GridSpecFromSubplotSpec(8, 8, subplot_spec=gs0[0])
gs01 = gridspec.GridSpecFromSubplotSpec(8, 8, subplot_spec=gs0[1])

for i in range(8):
    for j in range(8):
        ax00 = fig.add_subplot(gs00[i, j])
        ax00.text(0.5, 0.5, '0_{}_{}'.format(i, j), ha='center')
        ax00.set_xticks([])
        ax00.set_yticks([])

        ax01 = fig.add_subplot(gs01[i, j])
        ax01.text(0.5, 0.5, '1_{}_{}'.format(i, j), ha='center')
        ax01.set_xticks([])
        ax01.set_yticks([])

enter image description here

请注意,如果您要绘制大量图像,则可以使用axes_grid1工具包:

http://matplotlib.org/tutorials/toolkits/axes_grid.html#sphx-glr-tutorials-toolkits-axes-grid-py


{btsdaf} - Moondra
@Paul_H(如何ping一个用户名中间有空格的人?)嗨。我只是有一个简单的问题。是否有一种方法可以将标题添加到两个主要子图中?将“Image set 1”添加到左侧,“Image set 2”添加到右侧子图。非常感谢。 - Moondra
@Moondra 我会使用 fig.text http://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html?highlight=figure%20text#matplotlib.figure.Figure.text - Paul H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接