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

如何调整Matplotlib Gridspec子图间距及第三行列标题间距

解决Matplotlib 3×2子图布局及标题重叠问题

以下是满足需求的具体实现方案,通过GridSpec灵活控制行间距,同时解决第三行标题重叠问题:

完整代码示例

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

# 固定画布宽高
fig = plt.figure(figsize=(10, 8))

# 配置3行2列的网格:列间无间距,第一二行间距为0,第二三行间距设为0.5(可按需调整)
gs = GridSpec(3, 2, wspace=0, hspace=[0, 0.5], height_ratios=[1, 1, 1])

# 创建各子图
ax_a = fig.add_subplot(gs[0, 0])
ax_b = fig.add_subplot(gs[0, 1])
ax_c = fig.add_subplot(gs[1, 0])
ax_d = fig.add_subplot(gs[1, 1])
ax_e = fig.add_subplot(gs[2, 0])
ax_f = fig.add_subplot(gs[2, 1])

# 设置子图标题,解决第三行标题重叠问题
ax_a.set_title('(a)')
ax_b.set_title('(b)')
ax_c.set_title('(c)')
ax_d.set_title('(d)')
# 方式1:用LaTeX间距命令添加空白
ax_e.set_title('(e) \\hspace{1.5em}')
ax_f.set_title('\\hspace{1.5em} (f)')
# 方式2:调整标题x坐标(替代方案)
# ax_e.set_title('(e)', x=0.4)
# ax_f.set_title('(f)', x=0.6)

# 可选:优化第一二行子图视觉紧凑度,隐藏相邻边框
ax_a.spines['bottom'].set_visible(False)
ax_c.spines['top'].set_visible(False)
ax_b.spines['bottom'].set_visible(False)
ax_d.spines['top'].set_visible(False)

# 可选:隐藏第一行子图x刻度,第二行子图x刻度移至顶部(按需调整)
ax_a.tick_params(axis='x', bottom=False, labelbottom=False)
ax_b.tick_params(axis='x', bottom=False, labelbottom=False)
ax_c.tick_params(axis='x', top=True, labeltop=True, bottom=False, labelbottom=False)
ax_d.tick_params(axis='x', top=True, labeltop=True, bottom=False, labelbottom=False)

plt.show()

关键细节说明

  • 行间距控制:通过GridSpec的hspace参数传入列表[0, 0.5],分别指定第一行与第二行的间距为0,第二行与第三行的间距为0.5(数值可根据需求调整);wspace=0实现列间无间距。
  • 标题重叠解决:两种常用方式:
    1. 使用LaTeX的\hspace{}命令添加指定宽度的空白(代码中需转义反斜杠);
    2. 调整标题的x坐标,将两个标题分别向左右偏移,避免中间重叠。
  • 固定宽高:通过plt.figure(figsize=(10, 8))设置画布的固定宽度和高度,数值可根据实际需求修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:09:50