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

如何调整Plotly Python水平堆叠条形图的堆叠顺序为降序(值从大到小)

调整Plotly水平堆叠条形图的堆叠顺序(按var_3数值降序)

要让每个var_1对应的堆叠条形里,var_3数值最大的部分落在条形底部(也就是靠近Y轴的起始位置),最小的放在顶部,其实很简单——先给数据做个分组排序,再用排序后的数据绘图就行,具体操作看下面:

完整修改代码

import pandas as pd
import numpy as np
import plotly.express as px

# 生成原始数据
df = pd.DataFrame({'var_1':['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'], 
                   'var_2':['m', 'n', 'o', 'm', 'n', 'o', 'm', 'n', 'o'], 
                   'var_3':[np.random.randint(25, 33) for _ in range(9)]})

# 核心步骤:按var_1分组,每组内按var_3降序排序
df_sorted = df.sort_values(['var_1', 'var_3'], ascending=[True, False])

# 使用排序后的DataFrame绘制条形图
fig = px.bar(df_sorted, x='var_3', y='var_1', color='var_2', orientation='h', text='var_3')
fig.update_traces(textposition='inside', insidetextanchor='middle')

# 可选:如果需要固定var_2对应的颜色(避免排序后颜色对应关系变化),可以手动指定颜色序列
# fig.update_layout(colorway=['#FF5733', '#33FF57', '#3357FF'])

fig.show()

逻辑说明

  • 排序的作用:sort_values(['var_1', 'var_3'], ascending=[True, False])会先保持var_1的原有顺序(a、b、c),然后在每个var_1分组内,把var_3数值大的行排在前面。Plotly绘制水平堆叠条形图时,会按照DataFrame里数据的顺序从左到右(Y轴的起始方向)依次堆叠,这样数值大的部分就会自然出现在条形底部。
  • 颜色一致性处理:如果担心排序后var_2的颜色对应关系乱掉,可以通过update_layout(colorway)手动指定每个var_2类别对应的颜色,保证视觉上的一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:57:39