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

Pandas按name分组绘制时间序列折线图 自定义标题并自动保存

实现方法

不要直接用groupby接plot的批量调用逻辑,手动遍历分组对象逐个绘图即可,这种方式可以完全控制单张图表的所有属性,也能按分组名单独保存文件。

具体实现步骤

  • 先预处理时间字段,确保date列为datetime格式,避免x轴时间显示错乱
  • 遍历df.groupby('name')返回的(分组名、分组子集)元组,每个分组单独创建画布绘图
  • 绘图完成后直接用当前分组名设置标题、拼接保存文件名即可

参考代码

import pandas as pd
import matplotlib.pyplot as plt

# 预处理时间字段
df['date'] = pd.to_datetime(df['date'])

# 遍历每个分组绘图
for name, sub_df in df.groupby('name'):
    # 创建画布和轴对象,设置图表尺寸
    fig, ax = plt.subplots(figsize=(24, 12))
    
    # 分别绘制A、B指标的时间折线
    ax.plot(sub_df['date'], sub_df['A'], label='A指标', linewidth=2)
    ax.plot(sub_df['date'], sub_df['B'], label='B指标', linewidth=2)
    
    # 自定义图表标题、图例,旋转x轴标签避免重叠
    ax.set_title(f'分组 {name} 的A、B指标时间变化趋势', fontsize=18)
    ax.legend(fontsize=14)
    plt.xticks(rotation=45)
    ax.grid(alpha=0.3)
    
    # 按分组名保存图片,tight参数避免标签被截断
    plt.savefig(f'{name}.png', bbox_inches='tight')
    # 关闭当前画布释放内存,避免多图重叠
    plt.close()

扩展说明

如果需要把A、B两个指标拆成上下两个独立子图展示,只需要修改画布创建逻辑即可,示例:

# 创建2行1列的子图布局
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(24, 16))
# 第一个子图画A指标
ax1.plot(sub_df['date'], sub_df['A'], color='#1f77b4', label='A指标')
ax1.set_title(f'分组 {name} A指标变化趋势', fontsize=16)
ax1.legend()
# 第二个子图画B指标
ax2.plot(sub_df['date'], sub_df['B'], color='#ff7f0e', label='B指标')
ax2.set_title(f'分组 {name} B指标变化趋势', fontsize=16)
ax2.legend()

原来的df.groupby('name').plot()方法是pandas内部自动批量生成画布,没有暴露循环过程中的分组名参数入口,所以没法直接绑定分组信息设置标题和保存文件名,手动遍历分组的方式灵活度最高,所有图表样式都可以按需自定义。


内容的提问来源于stack exchange,提问作者Ayat Al Bahadli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:01:20