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
相关产品推荐
相关产品推荐

