2016-09-24 7 views
1

Ich habe eine schlechte Zeit zu versuchen, ein Gantt-Diagramm aus einem Datensatz mit Python zu plotten. Ich habe eine Reihe von Maschinen, die während eines bestimmten Zeitraums an verschiedenen Aufgaben arbeiten. Ich möchte ein Gantt-Diagramm erstellen, das auf der Y-Achse die Maschinen und auf der X-Achse die für jede Aufgabe aufgewendete Zeit anzeigt. Jede Maschine sollte nur einmal auf der y-Achse angezeigt werden und um die Aufgaben zu erleichtern Ich möchte die gleiche Farbe für jede Aufgabe.Gantt Chart Python Maschinenplanung

Die Idee ist, seltsame Dinge wie die gleiche Aufgabe zu überprüfen, die von zwei oder mehr Maschinen zusammen bearbeitet wird.

mir zeigen lassen, welche Daten stelle ich mit einem kleinen Beispiel haben:

machine equipment start finish 
    m1   e2  date1 date2 
    m2   e2  date3 date4 
    m1   e1  date5 date6 
    m3   e3  date7 date8 
    m3   e4  date9 date10 

ich die broken_barh von matplotlib zu verwenden versucht, aber ich kann nicht einen Weg herauszufinden, die Daten für das Grundstück effizient hinzufügen . Da habe ich etwas wie 100 Maschinen und 400 Aufgaben.

Here is a picture um zu zeigen, wie die Ausgabe aussehen sollte.

Aktueller Code unten:

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

Was halten Sie von Effizienz bedeuten? 100 * 400 ist nicht viel in Bezug auf * Recheneffizienz *. – sascha

+0

tatsächlich hat der Datensatz so etwas wie 2000 Zeilen. Ich wiederhole das alles naiv, um die Listen für verschiedene Maschinen und Aufgaben für die Handlung zu konsolidieren, es würde sehr lange dauern. – seimetz

+0

Sounds noch machbar. Ich denke, es gibt nicht viel Hilfe, ohne dass Sie Ihren Code zeigen/geben Sie mehr Informationen, was genau das Problem ist (z. B. die Vorverarbeitung oder endgültige plt.plot() Anruf). – sascha

Antwort