如何删除子图之间的“空白”空间?

4
我正在制作一个总共有68个子图的图形,并希望删除它们之间的所有空白间隙。以下是我现在拥有的内容:

plot with too much space

请问如何解决这个问题?
编辑:使用plt.tight_layout()会使情况变得更糟:

even more space between the subplots

以下是我的代码:
for j in range(0,len(sort_yf)):
for i in range(0,len(yf)):
    if yf[i]==sort_yf[j]:
        sort_ID=np.append(sort_ID,'output/'+ID[i]+'.png')
for i in range (1,69):
    plt.subplot(17,4,i,aspect='equal')
    plots=img.imread(sort_ID[i])
    plt.imshow(plots)
    plt.axis('off')
plt.show()

我猜这个问题的答案在这里已经给出了,因为这里的任何答案都不是真正有用的。 - ImportanceOfBeingErnest
2个回答

6
你尝试过紧凑布局功能吗?
plt.tight_layout()

另请参阅此处

编辑: 或者,您可以使用gridspec:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
images = [np.random.rand(40, 40) for x in range(68)]
gs = mpl.gridspec.GridSpec(17, 4)
gs.update(wspace=0.1, hspace=0.1, left=0.1, right=0.4, bottom=0.1, top=0.9) 
for i in range(68):
    plt.subplot(gs[i])
    plt.imshow(images[i])
    plt.axis('off')
plt.show()

enter image description here


嗨,我刚试了一下,不幸的是它没起作用。由于某种原因,它似乎让问题变得更糟了。 - blablabla
它怎么变得更糟了? 此外,您能否修改示例代码片段以便可以执行?例如,您没有指定 sort_yf - SmCaterpillar
每张图片实际上都变小了,我会上传一张我所说的图片。但我不能真正这么做,因为它需要一个CSV文件和一个装满相当大的图像的文件夹。 - blablabla
我猜gridspec可能适用于您的情况,请查看我对这篇帖子的编辑。 - SmCaterpillar

4

使用以下命令调整子图周围的空白:

plt.subplots_adjust(wspace=0.01,hspace=0.01)

在我的示例中,我只修改了wspace和hspace。您还可以适应位置。请参阅文档
您还可以修改GridSpec布局

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