使用matplotlib在x轴上自定义分类变量

时间:2018-05-26 13:00:16

标签: python matplotlib

我想将x轴上的月份按照我指定的顺序排序。我已广泛搜索,学习如何做到这一点,但没有运气。我对R语言非常熟悉,我会在R中使用factor class和它的级别很容易地做到这一点。但我对python相对较新,我从阅读中学到的是,python中的Categorical dtype最接近于R中的factor。然而,这两个类中的两个似乎存在重大的行为差异。语言。使用pyplot.bar()绘制时,没有对分类顺序进行排序,但在seaborn条形图中正确排序了相同的图。

pyplot.bar()的数据框中是否有自定义分类变量排序的选项?

pandas = 0.22.0
matplotlib = 2.1.2
seaborn = 0.8.1



import pandas as pd
import matplotlib.pyplot as plt
from pandas.api.types import CategoricalDtype


TestData = pd.DataFrame({'value':[1,2,5,3,5,6,8,9,8,1,2,8,9],'Month':['Jan','Mar','Jan','Feb','May','Apr','Jan','Mar','Jan','Feb','May','Apr','May']})

# Applying custom categorical order
MonthLabels = ['Jan','Feb','Mar','Apr','May']
M_catType = CategoricalDtype(categories = MonthLabels, ordered = True)
TestData['Month'] = TestData['Month'].astype(M_catType)

plt.bar('Month','value', data=TestData)

enter image description here enter image description here

解决

matplotlib的版本可能是错误的。我在阅读this post之后将版本更新为2.2.2并且所有内容都按预期工作(即,轴按照设置类别时提供的顺序排序。我也使用下面的代码设置类别,

TestData['Month'] = pd.Categorical(TestData['Month'], categories = MonthLabels , ordered = True)

1 个答案:

答案 0 :(得分:0)

这可能会有所帮助;来自documentation

  

注意不会自动订购新的分类数据。您必须明确传递ordered=True以表示有序的Categorical