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

Matplotlib中constrained_layout与hspace=0及suptitle的兼容问题

解决Matplotlib中GridSpec hspace=0与suptitle共存的问题

核心问题原因

constrained_layout=True会自动接管子图间距和整体布局,直接覆盖GridSpec中设置的hspace=0;关闭该选项后,默认布局会把suptitle挤出显示区域,导致无法看到。以下是两种可靠的解决思路:


方法1:关闭constrained_layout,手动预留标题空间

关闭自动布局后,用GridSpec保持子图间距为0,再通过fig.subplots_adjust()调整顶部边距,给suptitle留出显示空间:

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

# 关闭自动布局
fig = plt.figure(constrained_layout=False)
# 设置2行1列的GridSpec,子图间距为0
gs = GridSpec(2, 1, figure=fig, hspace=0)

# 添加子图
ax1 = fig.add_subplot(gs[0])
ax1.plot([1, 2, 3])
ax1.set_xticks([])  # 隐藏上子图的x轴刻度,避免和下子图重叠

ax2 = fig.add_subplot(gs[1])
ax2.plot([3, 2, 1])

# 手动调整顶部边距,给全局标题预留位置
fig.subplots_adjust(top=0.9)
# 添加全局标题
fig.suptitle('这是全局标题', fontsize=16)

plt.show()

方法2:使用tight_layout的rect参数限制布局范围

如果需要自动调整子图细节,关闭constrained_layout后,调用fig.tight_layout()时通过rect参数预留顶部空间,同时保留GridSpec的hspace=0:

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

fig = plt.figure(constrained_layout=False)
gs = GridSpec(2, 1, figure=fig, hspace=0)

ax1 = fig.add_subplot(gs[0])
ax1.plot([1, 2, 3])
ax1.set_xticks([])

ax2 = fig.add_subplot(gs[1])
ax2.plot([3, 2, 1])

# rect参数格式:[左边界, 下边界, 宽度, 高度],这里把高度设为0.95,顶部留0.05给标题
fig.tight_layout(rect=[0, 0, 1, 0.95])
fig.suptitle('全局标题', fontsize=16)

plt.show()

针对subfigures场景的适配

如果使用subfigures创建布局,同样关闭constrained_layout,设置subfigures的hspace=0后调整主图顶部边距:

import matplotlib.pyplot as plt

fig = plt.figure(constrained_layout=False)
# 创建2行1列的子图,间距为0
subfigs = fig.subfigures(2, 1, hspace=0)

ax1 = subfigs[0].subplots()
ax1.plot([1, 2, 3])
ax1.set_xticks([])

ax2 = subfigs[1].subplots()
ax2.plot([3, 2, 1])

# 预留顶部空间给全局标题
fig.subplots_adjust(top=0.9)
fig.suptitle('全局标题', fontsize=16)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:25:19