Пользовательская сортировка категориальной переменной по оси x с помощью matplotlib - PullRequest
0 голосов
/ 26 мая 2018

Я бы хотел заказать месяцы по оси 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)

enter image description here enter image description here

решено

Возможно, произошла ошибка с версией matplotlib.Я обновил версию до 2.2.2 после прочтения этого поста , и все работало как ожидалось (то есть, ось сортируется в порядке, указанном при установке категорий. Также я устанавливаю категорию, используя код ниже,

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

1 Ответ

0 голосов
/ 26 мая 2018

Это может помочь;из документации :

Примечание Новые категориальные данные не упорядочиваются автоматически.Вы должны явно передать ordered=True, чтобы указать упорядоченный Categorical.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...