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

如何基于Pandas groupby结果绘制同图多色分组柱状图?

问题:Pandas分组柱状图无法按origin区分颜色并在同一图表展示

DataFrame结构(已将日期列解析为datetime并设为索引):

origin  delta
month                
2021-09  admin  -1000
2021-09    ext     20
2021-10    ext    648
2021-11  admin  -1000
2021-11    ext    590

(注:实际数据为32行3列)

尝试的代码及问题:

  • 使用groupby绘图:
monthframe.groupby("origin").plot(kind="bar",stacked=True, legend=True, xlabel="Month", ylabel="Delta", layout=(20,10),subplots=False)

无法在同一图表中显示不同颜色的分组柱状图。

  • 直接调用plot:
monthframe.plot(kind="bar",stacked=True, legend=True, xlabel="Month", ylabel="Delta", layout=(20,10),subplots=False)

生成单个图表但所有origin的柱形都合并到同一月份且为同一种蓝色,无法区分分组信息,且部分参数不被识别。

解决方案:

核心是先将数据重塑为宽格式,让每个origin成为单独的列,这样Pandas就能自动为不同列分配不同颜色并在同一月份下展示分组柱形。

步骤1:重塑数据(用pivot)

# 将数据转为宽格式,month为索引,origin为列,delta为值
pivoted_df = monthframe.pivot(index='month', columns='origin', values='delta')

处理后的数据结构会变成:

origin    admin    ext
month                
2021-09  -1000      20
2021-10     NaN    648
2021-11  -1000    590

(若存在NaN,可使用fillna(0)填充,避免柱形缺失)

步骤2:绘制分组/堆叠柱状图

  • 分组柱状图(并列显示):
pivoted_df.plot(kind='bar', xlabel='Month', ylabel='Delta', legend=True)
  • 堆叠柱状图:
pivoted_df.fillna(0).plot(kind='bar', stacked=True, xlabel='Month', ylabel='Delta', legend=True)

问题原因说明:

  • 直接调用plot时,Pandas默认把每行作为独立柱形,未按origin分组区分;
  • groupby.plot默认会为每个分组生成单独子图,即使设置subplots=False也无法正确合并,因为原始长格式数据不符合并列/堆叠的结构要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:01:28