You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除Matplotlib使用plt.subplots绘制图像时的左右冗余留白

问题原因

你看到的红色留白是matplotlib默认子图布局预留的边距,你代码中subplots_adjust的所有参数都设为None,会使用默认的边距配置,因此画布背景会暴露出来。


修复方案

方法1:手动调整边距撑满画布

直接修改subplots_adjust的参数,将左右上下边距都设为0,让子图区域完全覆盖画布:

m, n, c = output.shape 
fig, ax = plt.subplots(nrows=4, ncols=1)
# 边距全设为0,消除画布留白
fig.subplots_adjust(left=0, right=1, bottom=0, top=1, wspace=0, hspace=0)
for i in range(4):
    ax[i].imshow(output[:,:,i].reshape(m, n, 1), cmap='gray', vmin=0, vmax=1)
    ax[i].axes.get_xaxis().set_visible(False)
    ax[i].axes.get_yaxis().set_visible(False)
fig.set_facecolor('red')
plt.show()

如果需要保留子图之间的间距,只把hspace设为你需要的数值即可,其他边距保持0就不会有画布层面的留白。

方法2:自动适配布局

如果不想手动计算边距,也可以在创建子图时开启自动布局:

# 加constrained_layout参数自动消除多余边距
fig, ax = plt.subplots(nrows=4, ncols=1, constrained_layout=True)

可选优化:匹配画布尺寸

如果调整边距后还有留白,大概率是画布宽高比和你堆叠的图片宽高比不匹配,可以在创建画布时指定figsize匹配比例,比如单张图宽高比为n:m,4张垂直堆叠后整体比例为n:4*m,按需调整画布尺寸即可:

# 示例数值可根据你的实际图片尺寸调整
fig, ax = plt.subplots(nrows=4, ncols=1, figsize=(n/100, 4*m/100), dpi=100)

内容的提问来源于stack exchange,提问作者pxq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 17:36:01