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

Matplotlib子图中hspace与wspace参数是否真正生效?

解决SubFigure间间距不生效的问题

你之前的操作误区在于:matplotlib.figure.Figure.subfigures() 创建的是子图容器(SubFigure),这类容器的布局由底层GridSpec控制,传统的plt.subplots_adjust(wspace=..., hspace=...)对它完全不生效——官方文档里提到的wspace/hspace是针对普通Axes子图的,并非SubFigure。

不用单独配置GridSpec、也不用layout='constrained'的解决方案如下:

方法1:创建SubFigure时直接指定间距

调用subfigures()时,通过gridspec_kw参数传入wspace和hspace,直接控制子图容器的间距:

import matplotlib.pyplot as plt

# 创建主画布
fig = plt.figure(figsize=(8, 6))

# 2行2列的SubFigure,通过gridspec_kw设置水平/垂直间距
subfigs = fig.subfigures(nrows=2, ncols=2, gridspec_kw={'wspace': 0.5, 'hspace': 0.5})

# 给每个SubFigure添加自定义Axes(替换成你的自定义Axes即可)
for row in range(2):
    for col in range(2):
        ax = subfigs[row, col].subplots()
        ax.plot([1, 3, 2], [5, 1, 4])
        ax.set_title(f'SubFig ({row+1}, {col+1})')

# 可选:用tight_layout确保内容不重叠(不会干扰自定义Axes)
fig.tight_layout()

plt.show()

方法2:创建后动态调整间距

如果需要在创建SubFigure之后修改间距,可以直接获取其对应的GridSpec对象更新参数:

# 接上面的代码,创建完subfigs后调整
gs = fig._gridspecs[0]  # 获取SubFigure对应的GridSpec
gs.update(wspace=0.3, hspace=0.3)  # 修改间距
fig.tight_layout()

关键说明

  • SubFigure本质是嵌套的画布容器,它的布局规则和普通Axes完全不同,必须通过控制其底层GridSpec来调整间距
  • tight_layout只会自动适配内容位置,不会像constrained_layout那样强制重排自定义Axes,适合你的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:47:21