Исходя из вашего вопроса, я предполагаю, что ваши данные в настоящее время сортируются по тому месту, где каждый месяц приходится на календарный год, начинающийся в январе.
# matplotlib version 3.1.1
import matplotlib.pyplot as plt
import pandas as pd
Я создам образец кадра данных для панд на основекак вы описали свой набор данных.
data = {'month': ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November',
'December'],
'frequency': [1000, 200, 100, 20, 10, 5, 5, 15, 25, 50, 800, 2000]}
monthly = pd.DataFrame.from_dict(data)
print(monthly)
month frequency
0 January 1000
1 February 200
2 March 100
3 April 20
4 May 10
5 June 5
6 July 5
7 August 15
8 September 25
9 October 50
10 November 800
11 December 2000
Приведенный выше набор данных отсортирован по календарному году, и в результате январь будет находиться в крайней левой части графика, а ноябрь и декабрь - в правой правой части.графика.
Обновив столбец month
, чтобы он содержал категориальные значения, мы можем отсортировать набор данных таким образом, который наилучшим образом соответствует нашим потребностям.
# define the sort order
month_sort = ['June', 'July', 'August', 'September', 'October', 'November',
'December', 'January', 'February', 'March', 'April', 'May']
# assign categorical values to the column
monthly['month'] = pd.Categorical(monthly['month'], month_sort, ordered=True)
# sort the dataframe by month
monthly.sort_values('month', inplace=True)
print(monthly)
month frequency
5 June 5
6 July 5
7 August 15
8 September 25
9 October 50
10 November 800
11 December 2000
0 January 1000
1 February 200
2 March 100
3 April 20
4 May 10
Теперь кадр данных находится внаш желаемый порядок сортировки, позволяющий отображать его в середине ноября, декабря и января.
fig, ax = plt.subplots(figsize=(12,6))
ax.bar(monthly['month'], monthly['frequency'])
ax.grid()
plt.show()
