Сортировка гистограммы по месяцам по возрастанию

#python #matplotlib #monthcalendar

Вопрос:

благодарен за некоторую помощь здесь!

У меня есть 3 кадра данных в Python и Matplotlib, каждый со столбцами «дата» как datetime64, например «2020-03-05″. Когда я их строю, я не могу получить месяц/да по возрастанию слева направо»

         
    vc = pd.concat([df1, df2, df3])
    vc['month_year'] = vc['date'].dt.strftime('%b %Y')
    vc['month_year'].value_counts().plot(kind='bar')
 

Спасибо!

График

Комментарии:

1. Что произойдет, если я отсортирую их в порядке возрастания после вычисления частоты?

2. Можете ли вы добавить свой вывод? Вы можете попробовать добавить флаг ascending=True в value_counts() метод: vacancies['MONTH_YEAR'].value_counts(ascending=True).plot(kind='bar')

3. Если это не работает, попробуйте: Или попробуйте перейти на это: vacancies['MONTH_YEAR'].value_counts(ascending=True).sort_values(by='MONTH_YEAR',ascending = True).plot(kind='bar')

4. @EitanRosati добавление: по возрастанию=True просто измените текущий порядок,но все равно не упорядочивайте по месяцам/годам слева направо .значения сортировки(по=’MONTH_YEAR’, по возрастанию = True) получает ошибку «Ошибка типа: значения сортировки() получил неожиданный аргумент ключевого слова «by», но спасибо!

Ответ №1:

Чтобы отобразить месяцы в порядке возрастания, вы можете сделать так:

  1. strftime() Возвращаемое ndarray значение, поэтому оно имеет другой вид, чем объект datetime. вместо приведения его с strftime() помощью приведения к объекту периода: dt.to_period('M') .
  2. после value_counts() того, как значения будут отсортированы по количеству и month_year станут индексом этого фрейма данных. поэтому вам нужно просто отсортировать индекс перед построением графика.

Ваш код после изменений:

 vc = pd.concat([df1, df2, df3])
vc['month_year'] = vc['date'].dt.to_period('M')
vc_graph = vc['month_year'].value_counts().sort_index(ascending=True)
vc_graph.index = (vc_graph.index).strftime('%b %Y')
vc_graph.plot(kind='bar')
 

Результат будет выглядеть так:

введите описание изображения здесь

Комментарии:

1. Спасибо, но я хотел бы сохранить форматирование как «ЯНВАРЬ 2019». Возможно ли это ?

2. Конечно, это добавит немного больше кода. Я добавил это в ответ