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

如何在Python中实现按BU分组的降序堆叠柱状图?

解决按BU分组、Sub-BU降序的堆叠柱状图问题

问题背景

你需要绘制满足以下要求的堆叠柱状图:

  • X轴显示Sub - BU,并按总计数降序排列
  • 按BU分组,每个BU使用专属颜色
  • 堆叠展示Contract Sum Type的计数

之前尝试通过fig.update_layout设置排序无效,核心原因是错误地针对Y轴设置排序,而非X轴的Sub - BU类别。


解决方案

1. 生成Sub-BU的降序排列规则

首先从统计后的counts_df中提取每个Sub - BU的总计数,按降序排序得到X轴的显示顺序:

# 获取Sub-BU按总计数降序的排列列表
sub_bu_sorted = counts_df.groupby('Sub - BU')['Total Count'].first().sort_values(ascending=False).index.tolist()

2. 绘制符合要求的堆叠柱状图

使用Plotly Express绘制图表,通过category_orders指定X轴排序,用color绑定BU实现专属颜色,启用堆叠模式:

import plotly.express as px

# 自定义BU专属颜色(可选,也可使用默认配色)
bu_color_map = {
    'A': '#1f77b4',
    'B': '#ff7f0e',
    'C': '#2ca02c',
    'D': '#d62728',
    'E': '#9467bd'
}

fig = px.bar(
    counts_df,
    x='Sub - BU',
    y='Count',
    color='BU',  # 按BU分配专属颜色
    barmode='stack',  # 启用堆叠模式
    title='Initial Contract Sum by Sub-BU (Grouped by BU)',
    text_auto=True,
    color_discrete_map=bu_color_map,
    category_orders={'Sub - BU': sub_bu_sorted}  # 强制X轴按指定顺序排列
)

# 优化布局(可选)
fig.update_layout(
    xaxis_title='Sub-BU',
    yaxis_title='Count',
    legend_title='BU'
)

fig.show()

关键调整说明

  • 排序逻辑:使用category_orders直接指定X轴Sub - BU的排列顺序,这是Plotly中控制类别轴排序的标准方式,之前错误地修改了Y轴的排序参数。
  • 颜色分组:通过color='BU'让每个BU拥有专属颜色,配合color_discrete_map可自定义颜色方案。
  • 堆叠模式:如果需要改为按Contract Sum Type堆叠、BU分组并列显示,只需将barmode改为'group',并调整color为'Contract Sum Type'即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:59:56