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

Python按唯一ID分组绘制多组带阴影子图并展示预测值总和

实现代码
import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv(r"data/data.csv", usecols = ['Hour', 'unqiue_id','Forecast'], header = 0)
# 获取所有唯一的unqiue_id
id_list = df['unqiue_id'].unique()
# 按id数量创建子图,默认竖排,可根据需求调整nrows、ncols参数修改排列方式
fig, axs = plt.subplots(nrows=len(id_list), ncols=1, figsize=(10, 5*len(id_list)))

# 遍历每个分组绘制子图
for ax, (group_id, group_data) in zip(axs, df.groupby('unqiue_id')):
    # 计算当前分组的Forecast标准差
    current_forecast = group_data['Forecast']
    sigma = current_forecast.std()
    timestep = group_data['Hour']
    # 绘制折线
    ax.plot(timestep, current_forecast, color = 'blue')
    # 绘制±sigma阴影区域
    ax.fill_between(timestep, current_forecast + sigma, current_forecast - sigma, alpha = 0.2, color = 'blue')
    # 子图顶部添加unqiue_id和Forecast求和值
    forecast_sum = group_data['Forecast'].sum()
    ax.set_title(f'unqiue_id: {group_id} | Forecast聚合求和值: {forecast_sum:.2f}', fontsize=12)
    # 可选配置:设置坐标轴标签
    ax.set_xlabel('Hour')
    ax.set_ylabel('Forecast')

# 调整子图间距避免内容重叠
plt.tight_layout()
plt.show()
关键逻辑说明
  • 用pandas的groupby方法按unqiue_id拆分数据,每一组对应一张子图
  • 提前按id数量创建对应数量的子图对象,无需重复创建画布
  • 每个子图单独计算当前分组的标准差,保证阴影区间是对应单组数据的统计结果
  • 子图标题直接拼接分组id和该组的Forecast求和结果,满足顶部显示聚合值的需求
  • 若需要调整子图排列(比如每行放2张子图),仅需修改plt.subplots的nrows、ncols参数即可,例如4个id每行放2张,可设置nrows=2, ncols=2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:24:03