TL'DR,垂直条形图以传统方式显示 - 事物从左到右排列.然而,当它被转换为(从水平条形图bar
来barh
),一切都颠倒.即,对于分组条形图,不仅分组条的顺序是错误的,每个组的顺序也是错误的.
例如,来自http://dwheelerau.com/2014/05/28/pandas-data-analysis-new-zealanders-and-their-sheep/的图表
如果仔细观察,您会发现条形图和图例的顺序相反 - 牛肉在图例的顶部显示,但在图表的底部显示.
作为最简单的演示,我改变了kind='bar',
对kind='barh',
从该图
https://plot.ly/pandas/bar-charts/#pandas-grouped-bar-chart
,结果如下:
https://plot.ly/7/ 〜XPT /
即,水平分组条形图中的条形图被颠倒排列.
怎么解决?
编辑: @Ajean,它实际上不仅是分组栏的顺序错误,每个组的顺序也是错误的.从图中matplotlib /大熊猫条形图(标签,蜱,等)的简单的定制显示它清楚:
我们可以看到订单也是非常规的,因为人们会期望图表是自上而下的,顶部是"AAA",而不是底部.
如果您搜索"Excel颠倒",您会发现人们在Excel中的所有地方都在抱怨这一点.Microsoft Excel有一个修复它,Matplotlib/Panda/Searborn/Ploty /等有没有修复它?
我认为组和子组的联合错误顺序归结为一个特征:y
轴向上增加,就像在通常的情节中一样.尝试反y
转轴的轴,如在这个无熊猫的例子中:
import numpy as np import matplotlib.pyplot as plt x=range(5) y=np.random.randn(5) #plot1: bar plt.figure() plt.bar(x,y) #plot2: barh, wrong order plt.figure() plt.barh(x,y) #plot3: barh with correct order: top-down y axis plt.figure() plt.barh(x,y) plt.gca().invert_yaxis()
我相信这个问题的最简单的解决方案是在绘图之前反转pandas数据帧.例如:
df = df.iloc[::-1] df.plot.barh(stacked=True);
在我看来,这是大熊猫功能中的一个错误.至少用户应该能够传递一个像reverse_order = True等参数.