【发布时间】:2016-03-08 16:01:51
【问题描述】:
TL'DR,垂直条形图以传统方式显示——事物从左到右排列。但是,当它转换为水平条形图(从bar 到barh)时,一切都颠倒了。即,对于分组条形图,不仅分组条的顺序是错误的,而且每个组的顺序也是错误的。
例如,来自http://dwheelerau.com/2014/05/28/pandas-data-analysis-new-zealanders-and-their-sheep/的图表
如果您仔细观察,您会发现条形图和图例顺序相反——牛肉在图例中显示在顶部,但在图表中显示在底部。
作为最简单的demo,我把kind='bar',改成了kind='barh',
从这张图
https://plot.ly/pandas/bar-charts/#pandas-grouped-bar-chart
结果如下所示:
https://plot.ly/7/~xpt/
即,水平分组条形图中的条形是倒置的。
如何解决?
编辑: @Ajean,实际上不仅分组条的顺序错误,每个组的顺序也错误。来自Simple customization of matplotlib/pandas bar chart (labels, ticks, etc.) 的图表清楚地表明了这一点:
我们可以看到这个顺序也是非常规的,因为人们希望图表是自上而下的,“AAA”在顶部,而不是底部。
如果您搜索“Excel 倒置”,您会发现到处都有人在 Excel 中抱怨这个问题。 Microsoft Excel 对其进行了修复,Matplotlib/Panda/Searborn/Ploty/etc 是否对其进行了修复?
【问题讨论】:
-
您可以手动将条形手柄传递给
plt.legend,然后随意订购。 -
不,问题不在于传说,看看plot.ly/7/~xpt,A、B、C、D的顺序是正确的。是条顺序错误。
-
嗯 .... 我不认为这是一个 bug 本身,而是一个约定问题。这些条通常按升序排列(即第一个元素是“0”,第二个元素是“1”,等等)。在此处展示的“自下而上”(“向上”表示“更高”)的案例中,第一个条形图位于每组的底部是有道理的。我认为,问题在于,传奇的约定是“自上而下”而不是“自下而上”。如果您真的想反转它,可能更改图例约定是最简单的。
标签: python pandas matplotlib bar-chart