我想将x轴上的月份定为我指定的顺序。我已经在Google上进行了广泛的搜索,以学习如何执行此操作,但是很遗憾。我对R语言非常熟悉,在R使用factor class
及其级别中,我会非常轻松地做到这一点。但是我对python来说相对较新,从阅读中学到的内容是Categorical dtype
python最接近factor
R。但是,在两种语言下,这些类的行为似乎有很大不同。使用进行绘制时,没有分类顺序的排序,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)
解决了
matplotlib的版本可能是错误的。阅读本文后,我将版本更新为2.2.2,并且一切都按预期工作(即,轴按设置类别时提供的顺序排序。此外,我还使用以下代码设置了类别,
TestData['Month'] = pd.Categorical(TestData['Month'], categories = MonthLabels , ordered = True)
这可能会有所帮助;从文档中:
注意新的分类数据不会自动排序。您必须明确传递
ordered=True
以指示已订购Categorical
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句