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()
Was halten Sie von Effizienz bedeuten? 100 * 400 ist nicht viel in Bezug auf * Recheneffizienz *. – sascha
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
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