You need to enable JavaScript to run this app. 单个DataFrame多类别图表拆分:为4个区域分别绘制营收图表的方法
优惠活动
大模型
产品
解决方案
定价
更多

单个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")遍历循环,为每个区域单独创建独立图窗:
    for region, group in df.groupby("Region"):
        group.plot(y="Revenue", title=region)
        plt.show()
    
    这种方式会生成4个完全分离的独立图窗,而非同画布下的子图布局。
  • 绘图返回的轴对象数组可用于个性化调整:比如修改纵轴范围、更换线条颜色、添加标注等,无需重写绘图逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 06:06:03