【问题标题】:Reduce the gap between rows when using matplotlib subplot?使用 matplotlib 子图时减少行间距?
【发布时间】:2021-08-17 07:08:34
【问题描述】:

我的子图结果

我的代码

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 可能有帮助
  • 或 plt.tight_layout()

标签: python matplotlib


【解决方案1】:

figsize 中的比例应与plt.subplot(rows, cols, figsize) 中的行和列的比例相同。例如,如果 rows 为 2,cols 为 4,则比率为 1/2,因此 figsize 为 (15, 7.5)(same ratio) 会很好。

以下代码为示例。

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'])

【讨论】:

    【解决方案2】:

    您可以在垂直方向缩小图形大小,例如

    fig,ax = plt.subplots(rows,cols, figsize = [24,12])
    

    或者你可以保持正方形的大小,但在子图周围放置更多的边距

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

    【讨论】:

      【解决方案3】:

      您已使用figsize=[24,24] 使其成为方形图像。 subplots_adjust 然后让每个ax[i,j] 粘到相邻的。但是ax.imshow() 并没有填满每个ax。在上面的示例中,如果图像的垂直尺寸较大,它将填充分配给该轴的区域,但会扭曲图像。如果您想尝试一下,请使用命令ax[0,i].imshow(a[ind,:,:],cmap='gray', aspect='auto')aspect='auto' 部分将拉伸您的图像以填充轴。 如果您希望图像纵横比不失真,则必须相应地编辑您的figsize

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2021-11-27
        • 1970-01-01
        • 2011-05-01
        • 2017-06-09
        相关资源
        最近更新 更多