Pandas построение графика для определения накладывающихся друг на друга задач
У меня есть датафрейм с 3 колонками Type, Start, END. Type колонка указывает название повторяющейся задачи, Start и END время начала и окончания этой задачи. Например дф, с небольшой выборкой
d1 = pd.DataFrame({
'Type':['Update', 'Update', 'Update', 'Normal', 'Normal', 'Normal'],
'Start':['2020-10-22 22:00:01', '2020-10-24 22:00:01', '2020-10-27 22:00:01', '2020-10-22 01:15:02', '2020-10-24 01:15:01', '2020-10-27 01:15:01'],
'END':['2020-10-22 23:32:33', '2020-10-24 23:00:16', '2020-10-27 23:00:17', '2020-10-22 04:51:45', '2020-10-24 08:52:19', '2020-10-27 04:07:48']
})
и вот необходимо его развернуть примерно в следующий график

чтобы визуально было видно, как накладываются по времени разные активности
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Если не заморачиваться серьезно с диаграммами Гантта, то можно сделать как-то так:
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as dt
df = pd.DataFrame({
'Type':['Update', 'Update', 'Update', 'Normal', 'Normal', 'Normal'],
'Start':['2020-10-22 22:00:01', '2020-10-24 22:00:01', '2020-10-27 22:00:01', '2020-10-22 01:15:02', '2020-10-24 01:15:01', '2020-10-27 01:15:01'],
'END':['2020-10-22 23:32:33', '2020-10-24 23:00:16', '2020-10-27 23:00:17', '2020-10-22 04:51:45', '2020-10-24 08:52:19', '2020-10-27 04:07:48']
})
df["Start"] = pd.to_datetime(df["Start"])
df["END"] = pd.to_datetime(df["END"])
bottoms = df.groupby("Type").ngroup()
ticks = list(df.groupby("Type").groups)
fig, ax = plt.subplots(figsize=(12, 3))
plt.grid(axis="x")
ax.set_ylim(-.5,2)
colors = ["green" if x else "blue" for x in bottoms ]
ax.set_yticks([0,1])
ax.set_yticklabels(ticks)
ax = ax.xaxis_date()
ax = plt.bar(dt.date2num(df["Start"]), height=.5, width=dt.date2num(df["END"]) - dt.date2num(df["Start"]), bottom=bottoms, color=colors)
plt.show()
