#matplotlib #python-3.8
#matplotlib #python-3.8
Вопрос:
У меня есть dataframe ниже как подмножество моих данных. Полный набор данных имеет «day_of_week» с понедельника по воскресенье и «час» в 24-часовом формате.
day_of_week hour record
0 Friday 00:00:00 23655
1 Friday 01:00:00 11806
2 Friday 02:00:00 6846
3 Friday 03:00:00 4284
4 Friday 04:00:00 5706
5 Friday 05:00:00 21557
6 Friday 06:00:00 71883
Ниже приведены типы данных:
day_of_week category
hour object
record int64
dtype: object
Я хочу создать несколько подзаголовков, по одному графику для каждого day_of_week, чтобы показать изменения в записи за 24-часовой период. Сначала я стараюсь делать только для «Пятницы».
Метод 1, и я получил сообщение об ошибке:
fig = plt.figure()
ax = plt.axes()
ax.plot('hour', 'record', data = activity_by_hour)
TypeError: float() argument must be a string or a number, not 'datetime.time'
Метод 2 и создается линейная диаграмма:
activity_by_hour.loc[activity_by_hour.day_of_week == 'Friday']
.plot('hour', 'record',
title = 'Friday',
xlabel = "Hour",
ylabel = "Ride ('000)",
legend = "",
linestyle = '--', linewidth = 2)
plt.xticks(ticks = (4 * 60 * 60) * np.arange(6)) # 4 hours interval consists of 14,400 seconds
plt.yticks(ticks = np.arange(0, 3.5e5, 5e4), labels = [int(num) for num in np.arange(0, 3.5e5, 5e4)/1000]);
В чем разница в обоих методах? Как я могу нарисовать аналогичную диаграмму для понедельника — воскресенья на одном рисунке, который показывает 7 строк для каждого дня? Я попробовал «для цикла», и в итоге у меня получилось 7 диаграмм, а не подзаголовок.
Комментарии:
1. Первый метод напрямую использует matplotlib. Второй метод использует библиотеку построения графиков pandas. Построение графиков Pandas основано на matplotlib и всегда работает с фреймом данных. Pandas имеет некоторые удобные функции, которые a.o. знает для обработки временных объектов. Обратите внимание, что существует также seaborn, который еще больше упрощает графики, связанные со статистикой.
2. @JohanC хорошо, отличная информация. означает ли это, что Matplotlib не способен отображать объект времени (т.Е. Ежедневные, почасовые данные)? Похоже, что библиотека построения графиков Pandas не позволяет отображать несколько строк на одном рисунке. Это правда?
3. Если вам нужно построить больше на том же подзаголовке с pandas, вы можете выполнить
ax = activity_by_hour.loc[....].plot(...)
и повторно использовать возвращенный подзаголовокax
для следующего графика:ax = activity_by_hour.loc[....].plot(..., ax=ax)
. Matplotlib позволяет многое, но некоторые данные необходимо «массировать», чтобы они соответствовали его числовому формату. Панды знают много приемов массажа.