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

如何在for循环中为matplotlib子图设置对应分组的自定义标题

解决方案

你可以直接利用groupby返回的分组键生成标题,也可以提前定义有序标题列表匹配分组顺序,两种实现方式如下:

方法1:直接用分组键生成标题

你调用groupby后迭代得到的每个group是(分组键, 分组数据)的元组,第一个元素就是对应的P1/P2/P3,直接提取拼接为目标标题即可:

fig, axs = plt.subplots(nrows=1, 
                        ncols=3, # 你原有代码ncols=5多余,仅3个分组改设为3即可避免空子图
                        figsize=(10, 3))

groups = df.groupby(level=1, axis=1)

for ax, (param_key, group_df) in zip(axs.flatten(), groups):
    group_df.plot(kind='bar', 
                  ax=ax,
                  color=['b', 'g', 'r'],
                  sharey=True,
                  legend=False,
                  rot=True)
    # 从分组键P1/P2/P3中截取数字,拼接为目标标题
    param_num = param_key.strip('P')
    ax.set_title(f'Parameter {param_num}')

# 自动调整子图间距,避免标题重叠
plt.tight_layout()
plt.show()

方法2:提前定义自定义标题列表

如果需要完全自定义标题内容,不需要依赖分组键,可以提前定义和分组顺序一致的标题列表,在循环中匹配调用:

# 提前定义有序标题,顺序对应P1、P2、P3
title_list = ['Parameter 1', 'Parameter 2', 'Parameter 3']

fig, axs = plt.subplots(nrows=1, 
                        ncols=3, 
                        figsize=(10, 3))

groups = df.groupby(level=1, axis=1)

for ax, (_, group_df), title in zip(axs.flatten(), groups, title_list):
    group_df.plot(kind='bar', 
                  ax=ax,
                  color=['b', 'g', 'r'],
                  sharey=True,
                  legend=False,
                  rot=True)
    ax.set_title(title)

plt.tight_layout()
plt.show()

补充说明

  • matplotlib子图设置标题的核心方法是ax.set_title(标题字符串),直接在循环内对当前迭代的子图对象调用即可
  • 如果你确实需要保留ncols=5的设置,只需要对前3个有效子图设置标题即可,不会影响剩余空子图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:54:03