J'ai du mal à essayer de tracer un diagramme de Gantt à partir d'un ensemble de données avec Python. J'ai un ensemble de machines qui travaillent sur différentes tâches au cours d'une période de temps. Je veux faire un diagramme de Gantt qui montre par l'axe Y les machines et l'axe x le temps passé sur chaque tâche. Chaque machine ne doit apparaître qu'une seule fois sur l'axe des y et pour faciliter la visualisation des tâches, je veux avoir la même couleur pour chaque tâche.Gantt Chart planification de la machine python
L'idée est de vérifier des choses étranges comme si la même tâche était traitée par deux machines ou plus.
Permettez-moi de montrer ce que je jeu de données avec un petit exemple:
machine equipment start finish
m1 e2 date1 date2
m2 e2 date3 date4
m1 e1 date5 date6
m3 e3 date7 date8
m3 e4 date9 date10
J'ai essayé d'utiliser le broken_barh de matplotlib, mais je ne peux pas trouver un moyen d'ajouter les données pour le terrain efficacement . Depuis que j'ai quelque chose comme 100 machines et 400 tâches.
Here is a picture pour montrer à quoi devrait ressembler la sortie.
code actuel ci-dessous:
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()
Que voulez-vous dire par efficacité? 100 * 400 ne concerne pas beaucoup * l'efficacité de calcul *. – sascha
effectivement l'ensemble de données a quelque chose comme 2000 lignes. Je continue à boucler naïvement tout cela pour consolider les listes pour différentes machines et tâches pour l'intrigue, cela prendrait beaucoup de temps. – seimetz
Sons toujours réalisables. Je pense qu'il n'y a pas beaucoup d'aide sans vous montrer votre code/donner plus d'informations quel est exactement le problème (par exemple le prétraitement ou l'appel final plt.plot()). – sascha