Я бы хотел заказать месяцы по оси X в указанном порядке.Я много гуглил, чтобы научиться это делать, но безуспешно.Я очень знаком с языком 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)