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

Matplotlib多子图行标题添加:如何为每行子图设置居中标题

如何为Matplotlib多行子图添加每行的行标题?

这个问题很常见——当你需要给多行子图添加各自的行标题时,plt.suptitle显然满足不了需求,因为它是整个图表的总标题,多次调用只会覆盖之前的内容,而且它的位置是相对于整个画布的,无法精准对应到每行子图的上方。

这里有个高效且易维护的解决方案,通过遍历子图行、计算每行的中心位置来添加行标题,同时还能简化子图独立标题的设置:

import matplotlib.pyplot as plt

# 创建3行4列的子图,获取二维axes数组(比手动拆分成单个ax变量更灵活)
fig, axes = plt.subplots(3, 4, figsize=(12, 8))

# 批量设置每个子图的独立标题,不用逐个写ax1/ax2...
for row_idx, ax_row in enumerate(axes):
    for col_idx, ax in enumerate(ax_row):
        ax.set_title(f'Fig{row_idx*4 + col_idx + 1}', ha='center')

# 定义每行的标题文本
row_titles = ['Row 1', 'Row 2', 'Row 3']

# 遍历每行,添加行标题
for ax_row, title in zip(axes, row_titles):
    # 获取该行第一个和最后一个子图的左右边界,计算行中心x坐标
    left_bound = ax_row[0].get_position().x0
    right_bound = ax_row[-1].get_position().x1
    center_x = (left_bound + right_bound) / 2
    
    # 获取该行子图的顶部y位置,加上偏移量避免和子图标题重叠
    top_y = ax_row[0].get_position().y1 + 0.02
    
    # 在计算好的位置添加行标题
    fig.text(center_x, top_y, title, ha='center', fontsize=14, fontweight='bold')

# 自动调整布局,避免标题重叠
fig.tight_layout()
plt.show()

这个方案的优势:

  • 高效可扩展:不管你是3行还是更多行,只需要修改row_titles列表和子图行数即可,不需要手动调整每个标题的位置
  • 位置精准:通过子图的实际位置计算行中心,确保标题始终在每行子图的正上方
  • 代码简洁:批量设置子图标题,避免重复编写ax1.set_title()这类冗余代码

如果你需要更精细的布局控制,也可以使用matplotlib.gridspec.GridSpec来预留行标题的空间,但上面的方法已经足够解决大部分场景的需求,代码也更简洁直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:18:18