You need to enable JavaScript to run this app. Matplotlib调用subplots时gridspec_kw的wspace参数不生效问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib调用subplots时gridspec_kw的wspace参数不生效问题求助

问题成因

  • 水平间距不生效的核心原因是imshow默认开启等比例显示(aspect='equal'),如果创建的画布尺寸和4张图拼接后的总宽高比不匹配,matplotlib会自动缩放子图大小适配图像比例,导致wspace=0的设置被覆盖,子图之间自动留出填充间隙。
  • 导出后垂直方向存在细微白缝,是因为默认画布自带上下左右的边距,同时子图轴脊、导出参数的默认padding也会残留少量空白像素。

解决方案

你可以通过精确匹配画布尺寸、移除所有额外边距的方式实现完全无间距拼接,修改后的代码如下:

import matplotlib.pyplot as plt

# 取单张图的高、宽像素值,所有待拼接图尺寸需一致
h, w = map1.shape[:2]
export_dpi = 150

# 按拼接后总像素尺寸精准设置画布大小,避免比例适配带来的额外间隙
fig = plt.figure(figsize=(2*w/export_dpi, 2*h/export_dpi), dpi=export_dpi)
gs = fig.add_gridspec(2, 2, hspace=0, wspace=0)
axs = gs.subplots()

(ax1, ax2), (ax3, ax4) = axs
# 展示图像时保持原始比例
ax1.imshow(map1, aspect='equal')
ax1.axis('off')
ax2.imshow(map2, aspect='equal')
ax2.axis('off')
ax3.imshow(map3, aspect='equal')
ax3.axis('off')
ax4.imshow(map4, aspect='equal')
ax4.axis('off')

# 仅保留最外侧刻度,同时移除所有轴脊避免残留边界
for ax in axs.flat:
    ax.label_outer()
    ax.spines[:].set_visible(False)

# 完全移除画布全局边距
plt.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0, wspace=0)

# 导出时关闭所有padding,避免白缝
plt.savefig('map4x4.png', dpi=export_dpi, bbox_inches='tight', pad_inches=0)

核心修改点说明

  • 根据拼接后图像的总像素和导出dpi反向计算画布尺寸,从根源避免子图缩放导致的间隙,不需要设置负的wspace
  • 显式移除所有子图的轴脊,消除1像素级的残留边界
  • 调整画布全局边距为0,覆盖默认的画布空白
  • 导出时设置pad_inches=0,完全移除导出环节的额外空白

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 09:36:03