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

Python循环绘制多客户独立折线图的代码修复方案

代码失效核心原因

现有代码无法生成70张独立折线图,由以下问题导致:

  • 循环绘图前未创建新画布,所有客户的折线会默认绘制在同一张画布上形成叠加
  • 绘图时y轴传入的是未重置索引的分组聚合Series,与x轴传入的时间列索引不匹配,易出现绘图错位
  • 单张图绘制完成后未执行画布清空、显示或保存操作,后续循环的绘图内容会持续叠加在当前画布
  • 循环遍历客户列表时使用了client_list[:60]切片,仅会处理前60个客户,无法覆盖全部70个客户
修复后可直接运行代码

先确保导入所需依赖,再执行循环逻辑:

import pandas as pd
import matplotlib.pyplot as plt

# 中文环境下可添加以下两行解决中文显示乱码问题,纯英文环境可删除
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 提前统一转换时间字段格式,避免循环内重复转换
new_df['time_window_end'] = pd.to_datetime(new_df['time_window_end'])
# 取全量客户列表,去掉[:60]切片限制
client_list = new_df['client_name'].unique().tolist()

for client in client_list:
    # 为当前客户创建独立画布,可根据需求修改figsize调整图表尺寸
    plt.figure(figsize=(10, 6))
    # 筛选当前客户的数据,按天维度聚合标签值
    client_subset = new_df[new_df['client_name'] == client]
    # 如果要统计每日记录条数把.sum()换成.count()即可
    daily_tag = client_subset.groupby(client_subset['time_window_end'].dt.floor('d'))['tag_count'].sum().reset_index()
    
    # 绘制折线
    plt.plot(daily_tag['time_window_end'], daily_tag['tag_count'], marker='o', linewidth=2)
    # 添加图表标注
    plt.title(f'客户{client}每日标签数量变化', fontsize=14)
    plt.xlabel('统计日期', fontsize=12)
    plt.ylabel('标签总量', fontsize=12)
    # 旋转x轴日期标签避免重叠
    plt.xticks(rotation=45)
    # 自动调整布局防止标签截断
    plt.tight_layout()
    
    # 两种输出方式二选一即可
    # 1. 保存图片到本地,文件名自动关联客户名不会覆盖
    plt.savefig(f'./客户_{client}_标签趋势.png', dpi=150)
    # 2. 直接弹窗显示图表
    # plt.show()
    
    # 清空当前画布,避免下一轮循环绘图叠加
    plt.close()
可选调整说明
  • 若你原本的统计需求是计算每个日期的记录条数而非标签值总和,把聚合逻辑里的.sum()替换为.count()即可
  • 折线颜色、样式、标记点形状、画布尺寸都可以通过修改plt.plot()、plt.figure()的参数自定义
  • 保存的图片默认存在Python脚本的运行同级目录,可自行修改plt.savefig()里的路径调整存储位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:31:04