Я сделал предположение (из вашего комментария), что ваш столбец date
имеет тип str
. Вот код, который создаст график:
Измените ваш pd.DataFrame
объект
Во-первых, функция для добавления столбца к вашему фрейму данных:
def modify_dataframe(df):
""" Modify dataframe to include new columns """
df['Month'] = pd.to_datetime(df['Date'], format='%Y-%m-%d').dt.month
return df
The * Функция 1011 * преобразует ряд df['Date']
в ряд дата-время; и я создаю новый столбец с именем Month
, который соответствует номеру месяца.
Из этого столбца мы можем сгенерировать координаты X
и Y
для вашего графика.
def get_x_y(df):
""" Get X and Y coordinates; return tuple """
series = df['Month'].value_counts().sort_index()
new_series = series.reindex(range(1,13)).fillna(0).astype(int)
return new_series.index, new_series.values
Это берет ваш измененный фрейм данных, создает серию, которая подсчитывает количество вхождений каждого месяца. Затем, если есть пропущенные месяцы, fillna
заполняет их значением 0
. Теперь вы можете приступить к построению графика.
Построение графика
Я создал график, который выглядит как нужный вывод, который вы связали.
Во-первых, вызовите свои функции:
df = modify_dataframe(df)
X, Y = get_x_y(df)
Создание холста и оси для построения графика.
fig = plt.figure(figsize=(12,5))
ax = fig.add_subplot(1, 1, 1, title='Films watched per month - 2019')
Создание меток X. Это заменит значения текущего месяца int
(т. Е. 1, 2, 3 ...) на оси X.
xlabels = [datetime.datetime(2019, i, 1).strftime("%B") for i in list(range(1,13))]
ax.set_xticklabels(xlabels, rotation=45, ha='right')
Установите метки x и метку x.
ax.set_xticks(range(1,13))
ax.set_xlabel('Month')
Установите ось Y, Y-Lim и Y-метку.
ax.set_yticks(range(0, max(s1.values)+2))
ax.set_ylim(0, max(s1.values)+1)
ax.set_ylabel('Count')
Чтобы получить желаемый результат, заполните под графиком цвет блока (я выбрал зеленый, но вы можете изменить его на другое).
ax.fill_between(X, [0]*len(X), Y, facecolor='green')
ax.plot(X, Y, color="black", linewidth=3, marker="o")
Постройте график!
plt.show() # or plt.savefig('output.png', format='png')