单个DataFrame多类别图表拆分:为4个区域分别绘制营收图表的方法
问题根源
你直接调用df.plot()只能生成总营收单折线,本质是当前DataFrame为长表结构:每一行仅对应单个日期下单个区域的营收记录,pandas绘图时无法自动识别Region字段的分类维度,会默认聚合所有营收值生成单条折线。要实现4个区域的独立分图展示,需要先完成数据格式转换,再调用pandas内置的子图配置即可。
实现流程
第一步:将长表转换为适配绘图的宽表结构
使用pandas内置的pivot方法,把Region字段的每个取值转为独立数值列,行索引保留原有日期,单元格存储对应日期、对应区域的营收值,代码为:df_wide = df.pivot(columns="Region", values="Revenue")
转换后宽表的列名与4个区域一一对应,行索引为连续日期,完全满足分维度绘图的输入要求。第二步:调用内置子图参数生成4个独立图表
pandas的plot()方法原生支持按列拆分子图,无需手动循环遍历,直接传入对应配置参数即可生成同画布下的4个独立子图:import matplotlib.pyplot as plt df_wide.plot( subplots=True, # 每个列(对应单个区域)生成独立子图 layout=(2, 2), # 子图按2行2列网格排布,适配4个区域的展示需求 figsize=(10, 8), # 设置整体画布尺寸 sharex=True, # 所有子图共享日期x轴,统一时间刻度 title=df_wide.columns # 每个子图自动绑定对应区域名称作为标题 ) # 自动调整子图间距,避免标题、轴标签重叠 plt.tight_layout() plt.show()
补充说明
- 如果需要单独导出每个区域的图表,可通过
groupby("Region")遍历循环,为每个区域单独创建独立图窗:
这种方式会生成4个完全分离的独立图窗,而非同画布下的子图布局。for region, group in df.groupby("Region"): group.plot(y="Revenue", title=region) plt.show() - 绘图返回的轴对象数组可用于个性化调整:比如修改纵轴范围、更换线条颜色、添加标注等,无需重写绘图逻辑。
内容的提问来源于stack exchange,提问作者Sonia Lo
相关产品推荐
相关产品推荐

