Matplotlib,水平条形图(barh)是颠倒的

xpt*_*xpt 19 python matplotlib bar-chart pandas

TL'DR,垂直条形图以传统方式显示 - 事物从左到右排列.然而,当它被转换为(从水平条形图barbarh),一切都颠倒.即,对于分组条形图,不仅分组条的顺序是错误的,每个组的顺序也是错误的.

例如,来自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 /等有没有修复它?

And*_*eak 28

我认为组和子组的联合错误顺序归结为一个特征: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()
Run Code Online (Sandbox Code Playgroud)

  • @xpt 1.出于某种原因,你的要点不会为我加载.我没有安装大熊猫,因此我的大熊猫免费回答.3.我认为你应该可以使用相同的解决方案:`plt.gca()`是一个轴,`df.plot`也应该返回一个轴.所以你应该能够按照'ax = df.plot(...); ax.invert_yaxis()`.你确定吗? (3认同)

Phi*_*arz 15

我相信这个问题的最简单的解决方案是在绘图之前反转pandas数据帧.例如:

df = df.iloc[::-1]
df.plot.barh(stacked=True);
Run Code Online (Sandbox Code Playgroud)

在我看来,这是大熊猫功能中的一个错误.至少用户应该能够传递一个像reverse_order = True等参数.