当使用matplotlib子图时,如何减小行之间的间距?

4

我的子图结果subplot

我的代码

fig,ax = plt.subplots(rows,cols, figsize = [24,24])
plt.subplots_adjust(hspace=0, wspace=0)

for i in range(cols):
    step = 6
    ind = i*step
    ax[0,i].imshow(a[ind,:,:],cmap='gray')
    ax[0,i].axis('off')

    ax[1,i].imshow(b[ind,:,:],cmap='gray')
    ax[1,i].axis('off')

    ax[2,i].imshow(c[ind,:,:],cmap='gray')
    ax[2,i].axis('off')

然而,似乎 plt.subplots_adjust(hspace=0, wspace=0) 完全没有起作用。我注意到它强制图形具有相等的 x 和 y 大小,你能帮我纠正一下吗?


gridspec 可能会有所帮助。 - Aditya
1
或 plt.tight_layout() - Aditya
3个回答

6
您可以将图像在垂直方向上缩小,例如:
fig,ax = plt.subplots(rows,cols, figsize = [24,12])

或者您可以保持正方形图像的大小,但在子图周围添加更多的边距。

plt.subplots_adjust(bottom=0.3, top=0.7, hspace=0)

3

figsize中的比例应与plt.subplot(rows, cols, figsize)中的行和列的比例相同。例如,如果行数是2,列数是4,则比例为1/2,因此figsize为(15, 7.5)(相同比例)效果最佳。

以下代码是一个示例。

fig, ax = plt.subplots(2, 4, figsize=(15, 7.5))
for i in range(2):
    for j in range(4):
        img = cv2.cvtColor(cv2.imread(os.path.join('../input/deepfake486326facescleaned', train_df.loc[i*2+j, 'name_path'])), cv2.COLOR_BGR2RGB)
        ax[i][j].imshow(img)
        ax[i][j].set_title(train_df.loc[i*2+j, 'label'])

enter image description here


2
你使用了figsize=[24,24]以将其变为正方形图像。接着,subplots_adjust 使每个ax[i,j]相邻贴合。但是,ax.imshow()并没有填满每个ax。在你上面的示例中,如果图像的垂直尺寸更大,则会填充分配给该轴的区域,但这会扭曲图像。如果你想尝试一下,请使用命令ax[0,i].imshow(a[ind,:,:],cmap='gray', aspect='auto'):其中aspect='auto'部分会拉伸图像以填充轴。如果你想让图像长宽比不变形,那么你需要相应调整figsize

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