Matplotlib: Как построить график со временем (HH24: MI) в качестве оси Y - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь построить график, показывающий, когда задания завершаются каждый день для другой рабочей даты.

Мой pandas датафрейм выглядит как ...

     business_dt  job_finish_time     job_name
0    19/03/2020   20/03/2020 09:17:08 job_1
1    20/03/2020   21/03/2020 08:10:11 job_1
2    21/03/2020   22/03/2020 14:12:02 job_1
3    19/03/2020   20/03/2020 20:10:04 job_2
4    20/03/2020   21/03/2020 20:06:02 job_2
5    21/03/2020   22/03/2020 21:44:01 job_2

Так ось x покажет бизнес dt (даты) и ось y, чтобы показать, когда работа завершена, hh24: mi: ss.

Поскольку я довольно новичок в matplotlib, и у меня возникают трудности в построение оси Y (чч24: ми: сс). Кто-нибудь из вас может подсказать мне, как построить это с помощью matplotlib?

Буду признателен за любую помощь.

Спасибо

Ответы [ 2 ]

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

Во-первых, как сказал @Sameeresque, вам нужно преобразовать ваши данные в datetime, если это еще не сделано:

df.business_dt = pd.to_datetime(df.business_dt)
df.job_finish_time = pd.to_datetime(df.job_finish_time)

Во-вторых, я счел необходимым использовать

pd.plotting.register_matplotlib_converters()

чтобы построить график времени и даты. Наконец, вы можете использовать Pandas обработку даты и времени, чтобы извлечь время и затем построить график в обычном режиме.

Чтобы получить правильное форматирование даты / времени, мне пришлось немного поиграться с DateFormatter (на основе этого ответа ). Обратите внимание, что ваши данные немного странные (два значения для каждого дня), поэтому они выглядят странно:

from matplotlib.dates import DateFormatter

df.business_dt = pd.to_datetime(df.business_dt)
df.job_finish_time = pd.to_datetime(df.job_finish_time)

pd.plotting.register_matplotlib_converters()

f, ax = plt.subplots(figsize=(10, 10))
ax.xaxis.set_major_formatter(DateFormatter('%d/%m/%Y'))
ax.yaxis.set_minor_formatter(DateFormatter('%H:%M:%S'))
ax.set_xlabel('Business dt')
ax.set_ylabel('Job Finish Time')
ax.plot(df.business_dt, df.job_finish_time.dt.time)

Вывод: enter image description here

Основные тики на ось у не совсем правильная, но она почти там.

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

Преобразуйте ваши данные в datetime.datetime, используя datetime.strptime. См. Документацию по нему здесь .

from datetime import datetime

datetime_y=[datetime.strptime(i, "%d/%m/%Y %H:%M:%S") for i in df['job_finish_time']]
datetime_x=[datetime.strptime(i, "%d/%m/%Y") for i in df['business_dt']]

plt.plot(datetime_x,datetime_y)
plt.show()
...