Plotly条形图排序后固定'Total'条形至顶部或底部的方法
在Plotly Express横向条形图中排序后固定'Total'条形到顶部/底部
要实现排序后将'Total'条形固定到顶部或底部,无法直接依赖categoryorder='total ascending'的自动排序,需要手动自定义类别顺序,具体方案如下:
核心思路
先对除'Total'外的所有类别按原排序规则(总和升序)排列,再将'Total'插入到列表的开头(顶部)或结尾(底部),最后强制图表使用这个自定义顺序。
代码实现
1. 将'Total'移至顶部
import plotly.express as px # 初始化横向条形图 fig = px.bar(sheet, y=sheet.index, x=rows, orientation='h') # 分离非Total类别并按总和升序排序 non_total_cats = [cat for cat in sheet.index if cat != 'Total'] # 若rows是单数值列,可去掉.sum(),直接用sheet.loc[x, rows] sorted_cats = sorted(non_total_cats, key=lambda x: sheet.loc[x, rows].sum()) # 自定义顺序:Total + 排序后的其他类别 custom_order = ['Total'] + sorted_cats # 更新y轴使用自定义顺序 fig.update_layout( yaxis={ 'categoryorder': 'array', 'categoryarray': custom_order } ) fig.show()
2. 将'Total'移至底部
只需修改自定义顺序的拼接逻辑:
custom_order = sorted_cats + ['Total']
补充说明
categoryorder='array'会强制图表按照categoryarray指定的顺序渲染类别,完全覆盖自动排序逻辑。- 若需要降序排序非Total类别,只需在
sorted函数中添加reverse=True参数。
内容的提问来源于stack exchange,提问作者Hithesh
相关产品推荐
相关产品推荐

