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
相关产品推荐
相关产品推荐

