如何移除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
相关产品推荐
相关产品推荐

