Matplotlib,水平条形图(barh)是倒置的
问题:Matplotlib,水平条形图(barh)是倒置的 TL'DR,垂直条形图以传统方式显示——事物从左到右排列。但是,当它转换为水平条形图(从bar到barh)时,一切都是颠倒的。即,对于分组条形图,不仅分组条的顺序是错误的,而且每组的顺序也是错误的。 例如,来自的图表 http://dwheelerau.com/2014/05/28/pandas-data-analysis-new-zea
问题:Matplotlib,水平条形图(barh)是倒置的
TL'DR,垂直条形图以传统方式显示——事物从左到右排列。但是,当它转换为水平条形图(从bar
到barh
)时,一切都是颠倒的。即,对于分组条形图,不仅分组条的顺序是错误的,而且每组的顺序也是错误的。
例如,来自的图表 http://dwheelerau.com/2014/05/28/pandas-data-analysis-new-zealanders-and-their-sheep/
如果仔细观察,您会发现条形图和图例的顺序相反——牛肉在图例中显示在顶部,但在图表中显示在底部。
作为最简单的演示,我从这张图https://plot.ly/pandas/bar-charts/#pandas-grouped-bar-chart将kind='bar',
更改为kind='barh',
,结果如下所示:https:// plot.ly/7/~xpt/
即,水平分组条形图中的条形是倒置的。
如何解决?
编辑: @Ajean,实际上不仅分组条的顺序错误,每个组的顺序也错误。来自matplotlib/pandas 条形图(标签、刻度等)的简单定制的图表清晰地显示了出来:
我们可以看到这个顺序也是非常规的,因为人们希望图表是自上而下的,“AAA”在顶部,而不是底部。
如果你搜索“Excel颠倒”,你会发现到处都有人在Excel中抱怨这个。 Microsoft Excel 对其进行了修复,Matplotlib/Panda/Searborn/Ploty/etc 是否对其进行了修复?
解答
我相信组和子组的联合错误顺序归结为一个特征:y
轴向上增加,就像通常的情节一样。尝试反转轴的y
轴,如下面的 pandas-less 示例所示:
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,pandas.DataFrame.plot
及其各种绘图子方法返回一个 matplotlib 轴对象,因此您可以直接反转其 y 轴:
ax = df.plot.barh() # or df.plot(), or similar
ax.invert_yaxis()
更多推荐
所有评论(0)