matplotlib 将子图组合成一个没有轴和间隙的图

matplotlib combining subplots into a single plot with no axis and no gaps

我有一张看起来像这样的图片:

它是使用 matplotlib 生成的:

for slice_idx in range(mandrill_t.highpasses[1].shape[2]):
    print(slice_idx)
    subplot(2, 3, slice_idx+1)
    imshow(np.abs(mandrill_t.highpasses[1][:,:,slice_idx]), cmap='Spectral', clim=(0, 1))

但是,对于我的用例,我希望所有这 6 张图像都在没有间隙或轴的单个图像中 - 我没有要显示的示例输出图像,但基本上,我希望它们水平堆叠(其中 3 个)和垂直方向(其中 2 个),这样 6 个图像就是一个图像。

我试着四处寻找类似的问题以从中汲取灵感,但到目前为止没有运气:(

任何指点都很好。

就是这样 GridSpec is for (see plt.subplots docs):

只需在开头添加以下行:

subplots(2, 3, gridspec_kw={"wspace": 0, "hspace": 0})

您可能还必须将一些情节元素设置为不可见,但如果没有 MCVE 就很难确定到底是哪个元素。

您必须指定网格参数:

  • 2 行
  • 3 列
  • 0 宽度space
  • 0 身高space

matplotlib.pyplot.subplots:

fig, axes = plt.subplots(nrows = 2, ncols = 3, gridspec_kw = {'wspace': 0, 'hspace': 0})

然后你可以遍历创建的轴,对于它们中的每一个,你必须首先显示图像并将轴设置为 'tight',其次设置为 'off'

for ax in axes.flatten():
    ax.imshow(img)
    ax.axis('tight')
    ax.axis('off')

您的代码会略有不同,因为您要为每个 ax.

绘制不同的图像

完整代码

import matplotlib.pyplot as plt

img = plt.imread('img.jpeg')

fig, axes = plt.subplots(nrows = 2, ncols = 3, gridspec_kw = {'wspace': 0, 'hspace': 0})

for ax in axes.flatten():
    ax.imshow(img)
    ax.axis('tight')
    ax.axis('off')

plt.show()