当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Matplotlib,水平条形图(barh)是颠倒的》经验,为你挑选了2个好方法。

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 /等有没有修复它?



1> Andras Deak..:

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


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

2> Philipp Schw..:

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

df = df.iloc[::-1]
df.plot.barh(stacked=True);

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

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有