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

如何在网格中指定的两个子图上方添加主标题而非整图上方?

嗨,这个需求在Matplotlib里完全可以实现,给你分享两个最流畅的解决思路,都是我平时常用的:

方法1:用fig.text()直接在画布上定位标题

这个方法简单直接,适合快速实现。你可以直接在画布的指定位置添加文本,精准控制它落在两个目标子图的上方:

import matplotlib.pyplot as plt

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

# 创建两个并排的子图(可根据你的网格布局调整行列数)
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)

# 给子图添加内容(示例)
ax1.plot([1,2,3], [4,5,6])
ax1.set_title("模型参数的演变")
ax2.bar([1,2,3], [7,8,9])
ax2.set_title("最终模型参数")

# 添加两个子图的共同主标题
# x=0.5是水平居中,y=0.95是距离顶部的位置,可根据布局调整
fig.text(
    x=0.5, y=0.95,
    s="模型参数分析",
    ha='center', va='center',
    fontsize=14, fontweight='bold'
)

# 调整布局,避免标题被裁剪
plt.subplots_adjust(top=0.88)
plt.show()

方法2:用GridSpec创建共享标题轴(更精准对齐)

如果你的子图是复杂网格布局的一部分,用GridSpec能更灵活地控制标题位置,确保它完美横跨目标子图:

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

# 创建画布
fig = plt.figure(figsize=(10, 7))

# 定义网格布局,这里以2行2列为例
gs = GridSpec(2, 2, figure=fig)

# 创建目标子图:第一行的两列
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])

# 可选:处理网格中其他子图(这里隐藏第二行的子图)
ax3 = fig.add_subplot(gs[1, 0])
ax4 = fig.add_subplot(gs[1, 1])
ax3.axis('off')
ax4.axis('off')

# 给目标子图添加内容
ax1.plot([1,2,3], [4,5,6])
ax1.set_title("模型参数的演变")
ax2.bar([1,2,3], [7,8,9])
ax2.set_title("最终模型参数")

# 创建横跨两个目标子图的轴,用来放置共同标题
shared_title_ax = fig.add_subplot(gs[0, :])
shared_title_ax.set_title("模型参数分析", fontsize=14, fontweight='bold')
shared_title_ax.axis('off')  # 隐藏轴的边框和刻度,只保留标题

plt.tight_layout()
plt.show()

小提示

  • 如果只是想给整个画布加全局大标题,用plt.suptitle()就够了,但它是针对整个图的,不是特定子组的。
  • 调整y坐标或者subplots_adjust的top参数,可以避免共同标题和子图自身的标题重叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:23:40