Как построить график событий на временной шкале - PullRequest
0 голосов
/ 19 марта 2020

Я отслеживал все фильмы, которые смотрел в 2019 году, и я хочу изобразить год на графике, используя matplotlib, pyplot или seaborn. Я видел график пользователя, который также отслеживал фильмы, которые он смотрел за год: Мне нужен такой график.

Как мне представить каждое движение ie как событие? 'на временной шкале?

Для справки, здесь - это взгляд на мою таблицу.

Спасибо

(извините, если basi c)

1 Ответ

0 голосов
/ 21 марта 2020

Я сделал предположение (из вашего комментария), что ваш столбец 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')

Plot of films

...