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

如何为matplotlib的4行2列子图添加每行统一的行标题?

报错原因分析

  • 第一个报错'numpy.ndarray' object has no attribute 'get_subplotspec':你创建的是4行2列的子图,axs是形状为(4,2)的二维numpy数组,axs[0]取的是第一行的两个子图对象组成的一维数组,自然没有子图专属的get_subplotspec方法,你后续改成axs[0,0]的写法已经解决了这个问题。
  • 第二个报错'Figure' object has no attribute 'add_subfigure':add_subfigure是Matplotlib 3.4.0版本才新增的API,你的本地Matplotlib版本低于这个要求,所以找不到该方法。

方案1:低版本兼容方案(无需升级Matplotlib,推荐)

无需修改原有绘图逻辑,直接在每行子图上方添加跨列居中文本作为行标题即可,代码如下:

# 保留你原来的绘图代码
fig, axs = plt.subplots(4, 2, figsize=(15,25))
y_labels = ['k0', 'k1']

for x in range(4):
    for y in range(2):
        axs[x, y].scatter([i[x] for i in X_vals], [i[y] for i in y_vals])
        axs[x, y].set_xlabel('Loss')
        axs[x, y].set_ylabel(y_labels[y])

# 新增行标题逻辑
for row in range(4):
    # 计算当前行两个子图的水平中点坐标,作为标题的横向位置
    x_mid = (axs[row, 0].get_position().x0 + axs[row, 1].get_position().x1) / 2
    # 计算当前行子图顶部的位置,加偏移量避免标题和子图重叠
    y_top = axs[row, 0].get_position().y1 + 0.01
    # 绘制行标题,颜色、字号可按需调整匹配你要的黄色样式
    fig.text(x_mid, y_top, f'Subplot row title {row}', ha='center', fontsize=14, color='gold', fontweight='bold')

# 调整子图间距,避免行标题被画布边缘遮挡
plt.subplots_adjust(top=0.95, hspace=0.3)
plt.show()

方案2:subfigure实现方案(需先升级Matplotlib到3.4.0及以上)

如果要使用你参考的subfigure方案,先执行pip install --upgrade matplotlib升级版本,再调整代码逻辑从创建阶段就拆分行级subfigure:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(15,25))
# 先把整个画布拆分为4行1列的subfigure,每一行对应一个subfigure
subfigs = fig.subfigures(nrows=4, ncols=1, hspace=0.3)
y_labels = ['k0', 'k1']

for row, subfig in enumerate(subfigs):
    # 为当前行subfigure设置行标题
    subfig.suptitle(f'Subplot row title {row}', fontsize=14, color='gold', fontweight='bold')
    # 在每个行subfigure内创建2列子图
    axs = subfig.subplots(nrows=1, ncols=2)
    for y in range(2):
        axs[y].scatter([i[row] for i in X_vals], [i[y] for i in y_vals])
        axs[y].set_xlabel('Loss')
        axs[y].set_ylabel(y_labels[y])

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:09:00