如何按region与profile分组,为每组生成sales与forecast折线图?
解决方案
核心思路
通过**双重分组(region + profile)**遍历数据集,为每个组合单独生成折线图,确保每个图表只展示对应分组的sales和forecast随day的变化趋势。
代码实现(Python + Matplotlib/Pandas)
假设你的数据集已加载为Pandas DataFrame df,可直接用以下代码实现需求:
import pandas as pd import matplotlib.pyplot as plt # 确保日期字段格式正确(若原始数据为字符串格式) df['day'] = pd.to_datetime(df['day']) # 按region和profile双重分组,遍历每个组合 for (region, profile), group in df.groupby(['region', 'profile']): # 创建独立画布,避免图表重叠 plt.figure(figsize=(10, 6)) # 绘制实际销量和预测值折线 plt.plot(group['day'], group['sales'], label='Actual Sales', marker='o', linestyle='-') plt.plot(group['day'], group['forecast'], label='Forecast', marker='s', linestyle='--') # 配置图表样式 plt.title(f'Sales vs Forecast: {region}-{profile.upper()}') plt.xlabel('Date') plt.ylabel('Amount') plt.legend() plt.xticks(rotation=45) plt.tight_layout() # 自动调整布局,防止标签截断 # 可选:保存图表到本地,文件名包含分组信息 plt.savefig(f'{region}_{profile}_sales_forecast.png') # 显示当前图表 plt.show()
代码说明
groupby(['region', 'profile']):实现双重分组,精准定位每个region+profile的组合- 每个分组循环创建独立画布
plt.figure(),保证图表互不干扰 profile.upper()让标题展示更规范(如显示为BIG而非big)- 可选的
plt.savefig()可自动保存所有图表,方便批量查看
替代方案(Plotly交互式图表)
如果需要支持缩放、悬停查看数据的交互式图表,可使用Plotly:
import plotly.express as px for (region, profile), group in df.groupby(['region', 'profile']): fig = px.line(group, x='day', y=['sales', 'forecast'], title=f'Sales vs Forecast: {region}-{profile.upper()}', labels={'value': 'Amount', 'variable': 'Data Type'}) fig.show() # 保存为HTML交互式文件 fig.write_html(f'{region}_{profile}_sales_forecast.html')
内容的提问来源于stack exchange,提问作者gosvn
相关产品推荐
相关产品推荐

