如何调整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
相关产品推荐
相关产品推荐

