使用 matplotlib 条形图设置列顺序

Posted

技术标签:

【中文标题】使用 matplotlib 条形图设置列顺序【英文标题】:Setting Order of Columns with matplotlib bar chart 【发布时间】:2017-01-01 07:21:55 【问题描述】:

我用以下代码制作了一个条形图:

Temp_Counts = Counter(weatherDFConcat['TEMPBIN_CON'])
df = pd.DataFrame.from_dict(Temp_Counts, orient = 'index')
df.plot(kind = 'bar')

它会生成以下条形图:

我想更改列的列出顺序。我尝试了一些似乎不起作用的不同方法。我正在使用的 DataFrame 如下所示:

我正在创建图中数据框中最后一列的条形图。将不胜感激创建条形图的替代方法的任何方向或想法,以使我能够更改轴的顺序。因为它存在,所以很难解释。

【问题讨论】:

【参考方案1】:

我建议您将TEMPBIN_CON 一分为二:LOWER_TEMPHIGHER_TEMP。然后,您使用以下列对 DataFrame 进行排序:

sorted = df.sort_values(by=['LOWER_TEMP', 'HIGHER_TEMP'])

然后你按照你已经完成的那样做情节:

sorted.plot(kind='bar')

【讨论】:

【参考方案2】:

我认为您可以将value_countssort_index 和最后一个Series.plot.bar 一起使用:

weatherDFConcat['TEMPBIN_CON'].value_counts().sort_index().plot.bar()

或者,如果您想使用您的解决方案:

Temp_Counts = Counter(weatherDFConcat['TEMPBIN_CON'])
df = pd.DataFrame.from_dict(Temp_Counts, orient = 'index').sort_index()
df.plot(kind = 'bar')

示例:

import matplotlib.pyplot as plt

weatherDFConcat = pd.DataFrame('TEMPBIN_CON':['30 degrees or more', '-15 to -18 degrees', '-3 to 0 degrees', '15 to 18 degrees', '-15 to -18 degrees'
])
print (weatherDFConcat)
          TEMPBIN_CON
0  30 degrees or more
1  -15 to -18 degrees
2     -3 to 0 degrees
3    15 to 18 degrees
4  -15 to -18 degrees

weatherDFConcat['TEMPBIN_CON'].value_counts().sort_index().plot.bar()
plt.show()

【讨论】:

它是如何工作的?还是您需要一些自定义订购? 添加 .sort_index() 对我的数据效果很好 - 谢谢!

以上是关于使用 matplotlib 条形图设置列顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 matplotlib 中将列指定为轴并绘制条形图?

Python pandas / matplotlib在条形图列上方注释标签[重复]

Matplotlib 绘制条形图,在数据框中具有 2 列关系

无输出:使用 Matplotlib 的条形图

Python中matplotlib默认绘制的条形图比较胖?如何设置成体型匀称的条形图,达到最佳的可视化效果。

matplotlib 条形图黑色 - 如何删除条形边框