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

Matplotlib绘制水平堆叠条形图如何强制固定列的堆叠顺序

固定pandas堆叠条形图列顺序的方法

问题原因

代码中传给y参数的是Python集合类型(大括号包裹的{'Remuneration','Training','Supervision'}),集合本身属于无序数据结构,pandas读取列名时拿到的顺序不固定,才会导致每次绘图堆叠顺序随机变化,和Matplotlib本身的排序逻辑无关。

解决方案

核心思路是给pandas传入明确有序的列名序列,不要用无序的集合类型,两种常用写法都可以实现固定堆叠顺序:

  • 直接在绘图方法的y参数中传入有序列表,列表内列名的顺序就是堆叠从底层到顶层的顺序,严格按照你需要的Remuneration-Training-Supervision顺序写入即可:
bar = df.plot.barh(
    x='Intervention',
    y=['Remuneration', 'Training', 'Supervision'],
    stacked=True
)
  • 如果需要降低后续代码出错的概率,可以在绘图前先按指定顺序筛选DataFrame的列,再调用绘图方法,效果完全一致:
# 提前锁定列顺序,后续绘图不需要重复指定y参数
target_cols = ['Intervention', 'Remuneration', 'Training', 'Supervision']
bar = df[target_cols].plot.barh(x='Intervention', stacked=True)

列表中列的顺序和堆叠层级一一对应:排在最前的指标会作为堆叠的最底层(紧贴条形起始位置),后续指标依次向上叠加,完全匹配你预先配置的按顺序对应的配色规则,不会再出现顺序错乱的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:57:25