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

Matplotlib:如何为子图的每行添加共享标题?

为Matplotlib每行子图添加共享标题

现有代码:

fig, ax = plt.subplots(nrows=3, ncols=2, figsize=(10,10))
for i in range(0, 3):
  # Left plot
  ax[i,0].plot(data1[i].x, data1[i].y)
  # Right plot
  ax[i,1].plot(data2[i].x, data2[i].y)

这段代码生成3行2列共6个子图,目前仅能为每个轴单独设置标题,请问是否可以为每行子图添加共享标题?


当然可以,以下是几种实用的实现方式:

方法1:手动用fig.text()定位行标题

通过计算每行的垂直位置,在两个子图上方居中添加文本作为共享标题:

fig, ax = plt.subplots(nrows=3, ncols=2, figsize=(10,10))
row_titles = ["第一行标题", "第二行标题", "第三行标题"]

for i in range(3):
    # 绘制子图
    ax[i,0].plot(data1[i].x, data1[i].y)
    ax[i,1].plot(data2[i].x, data2[i].y)
    
    # 添加行共享标题
    fig.text(0.5, 0.92 - i*0.3, row_titles[i], ha='center', va='center', fontsize=12, weight='bold')

plt.tight_layout()
plt.show()

0.5是水平居中位置,0.92 - i*0.3是垂直位置,可根据实际布局调整数值。

方法2:用GridSpec精准控制布局

如果需要更灵活的间距管理,用GridSpec预留标题区域:

import matplotlib.gridspec as gridspec

fig = plt.figure(figsize=(10,12))
# 定义6行2列网格:3行标题位+3行子图位,设置高度比例
gs = gridspec.GridSpec(6, 2, height_ratios=[1, 4, 1, 4, 1, 4], hspace=0.3)
row_titles = ["第一行标题", "第二行标题", "第三行标题"]

for i in range(3):
    # 创建每行的两个子图
    ax_left = fig.add_subplot(gs[2*i+1, 0])
    ax_right = fig.add_subplot(gs[2*i+1, 1])
    
    ax_left.plot(data1[i].x, data1[i].y)
    ax_right.plot(data2[i].x, data2[i].y)
    
    # 将标题放在对应行的预留位置
    fig.text(0.5, gs[2*i].midpoint, row_titles[i], ha='center', va='center', fontsize=12, weight='bold')

plt.show()

这种方式无需手动计算坐标,标题与子图的间距更可控。

方法3:偏移子图标题实现共享

给每行第一个子图设置标题,通过偏移让它覆盖两个子图的上方:

fig, ax = plt.subplots(nrows=3, ncols=2, figsize=(10,10), sharex=True, sharey=True)
row_titles = ["第一行标题", "第二行标题", "第三行标题"]

for i in range(3):
    ax[i,0].plot(data1[i].x, data1[i].y)
    ax[i,1].plot(data2[i].x, data2[i].y)
    
    # 把标题向上偏移,居中到该行两个子图上方
    ax[i,0].set_title(row_titles[i], y=1.1, ha='center')
    # 隐藏右侧子图的默认标题
    ax[i,1].set_title("")

plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:30:44