2016-09-24 5 views
1

У меня плохое время, пытаясь построить диаграмму Ганта из набора данных с помощью 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() 
+0

Что вы имеете в виду по эффективности? 100 * 400 мало что касается * вычислительной эффективности *. – sascha

+0

Фактически набор данных имеет что-то вроде 2000 строк. Я продолжаю наигрывать все это, чтобы консолидировать списки для разных машин и задач для сюжета, это займет очень много времени. – seimetz

+0

Звуки все еще возможны. Я думаю, что нет никакой помощи, если вы не покажете свой код/​​не предоставили больше информации о том, что конкретно проблема (например, препроцессор или окончательный вызов plt.plot()). – sascha

ответ

0

Seimetz,

Если вы прекрасно передавая все данные клиенту и пусть JS Ганта сделать это вещь, то RadiantQ JQuery Ганта пакет будет лучший вариант для вас. Вот онлайн демо-то подобное: http://demos.radiantq.com/jQueryGanttDemo/Samples/ServerStatusWithHugeData.htm

Вот как это выглядит: Server Status Sample

Подробнее о продукте здесь: http://radiantq.com/products/jquery-gantt-package/jquery-gantt-package-features/