У меня плохое время, пытаясь построить диаграмму Ганта из набора данных с помощью python. У меня есть набор машин, которые работают в разных задачах в течение определенного периода времени. Я хочу сделать диаграмму gantt, которая показывает осью y машины и ось x время, затрачиваемое на каждую задачу. Каждая машина должна появляться только один раз на оси y и упростить просмотр задач, которые я хочу для каждого задания одного цвета.График диаграмм Гантта python scheduling
Идея состоит в том, чтобы проверять странные вещи, например, обрабатывать одну и ту же задачу двумя или более машинами.
Позволь мне показать, какой набор данных я с небольшим примером:
machine equipment start finish
m1 e2 date1 date2
m2 e2 date3 date4
m1 e1 date5 date6
m3 e3 date7 date8
m3 e4 date9 date10
Я пытался использовать broken_barh из Matplotlib, но я не могу найти способ, чтобы добавить данные для участка эффективно , Поскольку у меня есть что-то вроде 100 машин и 400 задач.
Here is a picture, чтобы показать, как должен выглядеть результат.
Текущий код ниже:
import datetime as dt
machines = set(list(mydata["machine"]))
tasks = set(list(mydata["task"]))
fig, ax = plt.subplots(figsize=(20, 10))
yrange = 5 # y width of gantt bar
ymin = 0
orign = min(list(mydata["start"])) # time origin
for i in machines:
stdur = [] # list of tuples (start, duration)
ymin = index*6 # start y of gantt bar
for index, row in mydata.iterrows():
if row["machine"] == i:
start = (row["start"] - orign).total_seconds()/3600
duration = (row["finish"] - row["start"]).total_seconds()/3600
stdur.append((start,duration))
ax.broken_barh(stdur,(ymin,yrange))
ax.set_xlabel('Time')
ax.set_yticklabels(machines)
plt.show()
Что вы имеете в виду по эффективности? 100 * 400 мало что касается * вычислительной эффективности *. – sascha
Фактически набор данных имеет что-то вроде 2000 строк. Я продолжаю наигрывать все это, чтобы консолидировать списки для разных машин и задач для сюжета, это займет очень много времени. – seimetz
Звуки все еще возможны. Я думаю, что нет никакой помощи, если вы не покажете свой код/не предоставили больше информации о том, что конкретно проблема (например, препроцессор или окончательный вызов plt.plot()). – sascha