Vai al contenuto principale

Come creare un diagramma di Gantt in Python con Matplotlib

Scopri come creare un diagramma di Gantt in Python con matplotlib e perchรฉ queste visualizzazioni sono utili.
ยท 10 min leggi

Scopri con l'IA

In questa guida passo passo, vedremo cosโ€™รจ un diagramma di Gantt, perchรฉ e quando queste visualizzazioni sono utili, come creare un diagramma di Gantt in Python con matplotlib e come personalizzarlo ulteriormente. Lungo il percorso, costruiremo alcuni esempi di diagramma di Gantt in matplotlib.

Cosโ€™รจ un diagramma di Gantt e perchรฉ รจ utile?

Un diagramma di Gantt รจ un tipo di grafico a barre utilizzato per illustrare una pianificazione completa di progetto per la programmazione e la gestione. Mostra comunemente elementi come i nomi delle attivitร  del progetto, le loro date di inizio e fine, i team a cui sono assegnate, lo stato di completamento in percentuale o frazione, le prestazioni per team e le tappe fondamentali del progetto.

I nomi delle attivitร  sono disposti sullโ€™asse y del diagramma di Gantt, di solito ordinati per data di inizio in ordine cronologico dallโ€™alto verso il basso. Lโ€™asse x invece serve a mostrare i periodi temporali, con la larghezza di ogni barra che corrisponde alla durata di esecuzione di ciascuna attivitร .

Poichรฉ un diagramma di Gantt รจ essenzialmente una forma specifica di grafico a barre orizzontali, possiamo crearlo in molte librerie di visualizzazione dati di Python, tra cui matplotlib, Plotly, Bokeh e Altair. In questo tutorial, ci concentreremo sulla creazione di diagrammi di Gantt nella piรน popolare tra queste โ€“ matplotlib.

Se vuoi esplorare modi alternativi per creare un diagramma di Gantt e altri tipi di grafici in Python, dai unโ€™occhiata al corso Introduction to Data Visualization with Plotly in Python. Se hai bisogno di rinfrescare o sviluppare le tue competenze in matplotlib, ti saranno utili questi corsi: Introduction to Data Visualization with Matplotlib e Python for MATLAB Users.

Come creare un diagramma di Gantt in Python con Matplotlib

Usando barh()

Cominciamo costruendo un diagramma di Gantt base in matplotlib usando il metodo barh() di matplotlib.pyplot.

Per prima cosa, dobbiamo importare le librerie necessarie:

import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import datetime as dt

Il passo successivo รจ creare dei dati di esempio su cui lavorare:

df = pd.DataFrame({'task': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'],
                  'team': ['R&D', 'Accounting', 'Sales', 'Sales', 'IT', 'R&D', 'IT', 'Sales', 'Accounting', 'Accounting', 'Sales', 'IT'],
                  'start': pd.to_datetime(['20 Oct 2022', '24 Oct 2022', '26 Oct 2022', '31 Oct 2022', '3 Nov 2022', '7 Nov 2022', '10 Nov 2022', '14 Nov 2022', '18 Nov 2022', '23 Nov 2022', '28 Nov 2022', '30 Nov 2022']),
                  'end': pd.to_datetime(['31 Oct 2022', '28 Oct 2022', '31 Oct 2022', '8 Nov 2022', '9 Nov 2022', '18 Nov 2022', '17 Nov 2022', '22 Nov 2022', '23 Nov 2022', '1 Dec 2022', '5 Dec 2022', '5 Dec 2022']),
                  'completion_frac': [1, 1, 1, 1, 1, 0.95, 0.7, 0.35, 0.1, 0, 0, 0]})
print(df)

Output:

  task        team      start        end  completion_frac
0     A         R&D 2022-10-20 2022-10-31             1.00
1     B  Accounting 2022-10-24 2022-10-28             1.00
2     C       Sales 2022-10-26 2022-10-31             1.00
3     D       Sales 2022-10-31 2022-11-08             1.00
4     E          IT 2022-11-03 2022-11-09             1.00
5     F         R&D 2022-11-07 2022-11-18             0.95
6     G          IT 2022-11-10 2022-11-17             0.70
7     H       Sales 2022-11-14 2022-11-22             0.35
8     I  Accounting 2022-11-18 2022-11-23             0.10
9     J  Accounting 2022-11-23 2022-12-01             0.00
10    K       Sales 2022-11-28 2022-12-05             0.00
11    L          IT 2022-11-30 2022-12-05             0.00

Per facilitare la costruzione di un diagramma di Gantt per questi dati, dobbiamo calcolare altre quattro colonne che rappresenteranno le seguenti informazioni:

  1. Quanti giorni sono passati/passerebbero dallโ€™inizio complessivo del progetto alla data di inizio di ciascuna attivitร :
df['days_to_start'] = (df['start'] - df['start'].min()).dt.days
  1. Quanti giorni sono passati/passerebbero dallโ€™inizio complessivo del progetto alla data di fine di ciascuna attivitร :
df['days_to_end'] = (df['end'] - df['start'].min()).dt.days
  1. La durata di ciascuna attivitร , includendo sia la data di inizio che quella di fine:
df['task_duration'] = df['days_to_end'] - df['days_to_start'] + 1  # to include also the end date
  1. Lo stato di completamento di ciascuna attivitร  convertito da frazione in una quota di giorni allocati a quellโ€™attivitร :
df['completion_days'] = df['completion_frac'] * df['task_duration']

Controlliamo cosa abbiamo ottenuto:

print(df)

Output:

  task        team      start        end  completion_frac  days_to_start  \
0     A         R&D 2022-10-20 2022-10-31             1.00              0  
1     B  Accounting 2022-10-24 2022-10-28             1.00              4  
2     C       Sales 2022-10-26 2022-10-31             1.00              6  
3     D       Sales 2022-10-31 2022-11-08             1.00             11  
4     E          IT 2022-11-03 2022-11-09             1.00             14  
5     F         R&D 2022-11-07 2022-11-18             0.95             18  
6     G          IT 2022-11-10 2022-11-17             0.70             21  
7     H       Sales 2022-11-14 2022-11-22             0.35             25  
8     I  Accounting 2022-11-18 2022-11-23             0.10             29  
9     J  Accounting 2022-11-23 2022-12-01             0.00             34  
10    K       Sales 2022-11-28 2022-12-05             0.00             39  
11    L          IT 2022-11-30 2022-12-05             0.00             41  

    days_to_end  task_duration  completion_days 
0            11             12            12.00 
1             8              5             5.00 
2            11              6             6.00 
3            19              9             9.00 
4            20              7             7.00 
5            29             12            11.40 
6            28              8             5.60 
7            33              9             3.15 
8            34              6             0.60 
9            42              9             0.00 
10           46              8             0.00 
11           46              6             0.00 

Ora siamo pronti a generare un diagramma di Gantt di base in matplotlib:

plt.barh(y=df['task'], width=df['task_duration'], left=df['days_to_start'])
plt.show()

Output:

Diagramma di Gantt in Matplotlib

Il grafico sopra necessita di diversi aggiustamenti per poter estrarre il massimo delle informazioni:

  • Aggiungere un titolo significativo e le etichette dellโ€™asse x (date)
  • Invertire lโ€™asse y per avere tutte le attivitร  in ordine cronologico dallโ€™alto verso il basso
  • Aggiungere una griglia
  • Colorare le attivitร  per team
  • Mostrare una legenda
  • Aggiungere lo stato di completamento delle attivitร 

Metteremo in pratica presto tutte queste migliorie. Prima, perรฒ, vediamo come gestire la creazione di un diagramma di Gantt di base.

Usando broken_barh()

Quando alcune attivitร  contengono due o piรน sotto-attivitร  distribuite su un periodo di tempo, dovremmo usare un altro metodo di matplotlib โ€“ broken_barh().

Per avere dei dati di esempio su cui provare questo approccio, facciamo quanto segue:

  1. Prendiamo dal dataframe iniziale solo le attivitร  assegnate al team Sales (per ora, ignoriamo la colonna completion_frac).
  2. Rinominiamo le colonne start ed end in start_1 ed end_1 rispettivamente (per comoditร ).
  3. Aggiungiamo piรน sotto-attivitร  ad alcune delle attivitร  disponibili.
  4. Per ciascuna sotto-attivitร , calcoliamo le tre colonne mostrate sopra che rappresentano le seguenti informazioni:
    • Quanti giorni sono passati/passerebbero dallโ€™inizio complessivo del progetto alla data di inizio di ciascuna sotto-attivitร .
    • Quanti giorni sono passati/passerebbero dallโ€™inizio complessivo del progetto alla data di fine di ciascuna sotto-attivitร .
    • La durata di ciascuna sotto-attivitร , includendo sia la data di inizio che quella di fine.
# 1
df2 = df[df['team']=='Sales'][['task', 'team', 'start', 'end']]

# 2
df2.rename(columns={'start': 'start_1', 'end': 'end_1'}, inplace=True)
df2.reset_index(drop=True, inplace=True)

# 3
df2['start_2'] = pd.to_datetime([None, '10 Nov 2022', '25 Nov 2022', None])
df2['end_2'] = pd.to_datetime([None, '14 Nov 2022', '28 Nov 2022', None])
df2['start_3'] = pd.to_datetime([None, None, '1 Dec 2022', None])
df2['end_3'] = pd.to_datetime([None, None, '5 Dec 2022', None])

# 4
for i in [1, 2, 3]:
    suffix = '_' + str(i)
    df2['days_to_start' + suffix] = (df2['start' + suffix] - df2['start_1'].min()).dt.days
    df2['days_to_end' + suffix] = (df2['end' + suffix] - df2['start_1'].min()).dt.days
    df2['task_duration' + suffix] = df2['days_to_end' + suffix] - df2['days_to_start' + suffix] + 1


print(df2)

Output:

task   team    start_1      end_1    start_2      end_2    start_3  \
0    C  Sales 2022-10-26 2022-10-31        NaT        NaT        NaT  
1    D  Sales 2022-10-31 2022-11-08 2022-11-10 2022-11-14        NaT  
2    H  Sales 2022-11-14 2022-11-22 2022-11-25 2022-11-28 2022-12-01  
3    K  Sales 2022-11-28 2022-12-05        NaT        NaT        NaT  

      end_3  days_to_start_1  days_to_end_1  task_duration_1  \
0        NaT                0              5                6  
1        NaT                5             13                9  
2 2022-12-05               19             27                9  
3        NaT               33             40                8  

  days_to_start_2  days_to_end_2  task_duration_2  days_to_start_3  \
0              NaN            NaN              NaN              NaN  
1             15.0           19.0              5.0              NaN  
2             30.0           33.0              4.0             36.0  
3              NaN            NaN              NaN              NaN  

  days_to_end_3  task_duration_3 
0            NaN              NaN 
1            NaN              NaN 
2           40.0              5.0 
3            NaN              NaN 

Nota che ora lโ€™attivitร  D ha due sotto-attivitร , lโ€™attivitร  H ne ha tre e le attivitร  C e K ne hanno una ciascuna. Pertanto, le attivitร  D e H sono quelle per cui applicheremo il metodo broken_barh(). Poichรฉ la sintassi di questo metodo รจ un poโ€™ meno intuitiva di quella di barh(), diamo unโ€™occhiata ai suoi parametri principali e al loro formato. I parametri obbligatori di broken_barh() sono:

  • xranges โ€“ una sequenza di tuple nel formato (xmin, xwidth) per indicare lโ€™inizio e lโ€™estensione di ciascuna barra. Qui, ogni barra rappresenta una sotto-attivitร . Quindi, questo parametro mostra la data di inizio e la durata di ciascuna sotto-attivitร .
  • yrange โ€“ una tupla nel formato (ymin, yheight) per indicare la posizione y e lโ€™altezza di ciascuna barra.

Ora, tracciamo il nostro diagramma di Gantt "spezzato". Lโ€™algoritmo รจ il seguente:

  1. Crea una figura con sottotrame.
  2. Itera sulle righe del dataframe e controlla se lโ€™attivitร  ha una, due o tre sotto-attivitร . In base a ciรฒ, procedi cosรฌ:
    • Una sotto-attivitร : traccia una barra usando il metodo barh() come fatto in precedenza.
    • Due sotto-attivitร : traccia due barre usando il metodo broken_barh().
    • Tre sotto-attivitร : traccia tre barre usando il metodo broken_barh().
  3. Aggiungi gli aggiustamenti di base: imposta e etichetta i tick dellโ€™asse y.
# 1
fig, ax = plt.subplots()

# 2
for index, row in df2.iterrows():
    if row['start_2'] is None:
        ax.barh(y=df2['task'], width=df2['task_duration_1'], left=df2['days_to_start_1'])
    elif row['start_2'] is not None and row['start_3'] is None:
        ax.broken_barh(xranges=[(row['days_to_start_1'], row['task_duration_1']), (row['days_to_start_2'], row['task_duration_2'])], yrange=(index + 1, 0.5))
    else:
        ax.broken_barh(xranges=[(row['days_to_start_1'], row['task_duration_1']), (row['days_to_start_2'], row['task_duration_2']), (row['days_to_start_3'], row['task_duration_3'])], yrange=(index + 1, 0.5))

# 3
ax.set_yticks([1.25, 2.25, 3.25, 4.25])
ax.set_yticklabels(df2['task'])

plt.show()

Output:

Diagramma di Gantt con broken_barh()

Nel codice sopra, possiamo in realtร  usare il metodo broken_barh() per tracciare le barre anche per le attivitร  con una sola sotto-attivitร . In questo caso, dobbiamo sostituire questa riga di codice:

ax.barh(y=df2['task'], width=df2['task_duration_1'], left=df2['days_to_start_1'])

con questa:

ax.broken_barh(xranges=[(row['days_to_start_1'], row['task_duration_1'])], yrange=(index + 1, 0.5))

Questo approccio renderebbe anche il nostro codice piรน uniforme e leggibile.

Come personalizzare un diagramma di Gantt in Matplotlib

Torniamo al nostro dataframe iniziale:

print(df)

Output:

  task        team      start        end  completion_frac  days_to_start  \
0     A         R&D 2022-10-20 2022-10-31             1.00              0  
1     B  Accounting 2022-10-24 2022-10-28             1.00              4  
2     C       Sales 2022-10-26 2022-10-31             1.00              6  
3     D       Sales 2022-10-31 2022-11-08             1.00             11  
4     E          IT 2022-11-03 2022-11-09             1.00             14  
5     F         R&D 2022-11-07 2022-11-18             0.95             18  
6     G          IT 2022-11-10 2022-11-17             0.70             21  
7     H       Sales 2022-11-14 2022-11-22             0.35             25  
8     I  Accounting 2022-11-18 2022-11-23             0.10             29  
9     J  Accounting 2022-11-23 2022-12-01             0.00             34  
10    K       Sales 2022-11-28 2022-12-05             0.00             39  
11    L          IT 2022-11-30 2022-12-05             0.00             41  

    days_to_end  task_duration  completion_days 
0            11             12            12.00 
1             8              5             5.00 
2            11              6             6.00 
3            19              9             9.00 
4            20              7             7.00 
5            29             12            11.40 
6            28              8             5.60 
7            33              9             3.15 
8            34              6             0.60 
9            42              9             0.00 
10           46              8             0.00 
11           46              6             0.00 

e al nostro primo diagramma di Gantt:

plt.barh(y=df['task'], width=df['task_duration'], left=df['days_to_start'])
plt.show()

Output:

Diagramma di Gantt in Matplotlib

In particolare, vogliamo aggiungere alcune personalizzazioni a questo grafico per renderlo piรน informativo.

Per approfondire la personalizzazione dei grafici con matplotlib, considera queste risorse: Matplotlib Tutorial: Python Plotting e Matplotlib Cheat Sheet: Plotting in Python.

Regolazioni di base del diagramma di Gantt

Queste includono:

  • Aggiungere un titolo al grafico
  • Regolare e personalizzare gli assi
  • Aggiungere una griglia

Aggiungere un titolo al grafico

Avere un titolo significativo รจ fondamentale per qualsiasi grafico, incluso un diagramma di Gantt. Supponiamo che il nostro progetto si chiami Project X:

plt.barh(y=df['task'], width=df['task_duration'], left=df['days_to_start'])
plt.title('Project Management Schedule of Project X', fontsize=15)
plt.show()

Output:

Titolo del grafico del diagramma di Gantt in Matplotlib

Regolare e personalizzare gli assi e aggiungere una griglia

In questo passaggio, estenderemo il codice precedente ed eseguiremo le seguenti azioni:

  1. Creare una figura con sottotrame per poter lavorare con lโ€™oggetto ax.
  2. Invertire lโ€™asse y per avere tutte le attivitร  in ordine cronologico dallโ€™alto verso il basso.
  3. Determinare le posizioni ottimali dei tick sullโ€™asse x.
    • Diciamo che vogliamo posizionare i tick dellโ€™asse x ogni lunedรฌ, tenendo presente che Project X รจ iniziato di giovedรฌ.
    • Optiamo solo per tick principali per evitare di appesantire il grafico.
  4. Determinare le giuste etichette dei tick sullโ€™asse x e un formato appropriato.
    • Anche qui, teniamo presente che Project X รจ iniziato di giovedรฌ e dobbiamo etichettare solo i lunedรฌ.
    • Poichรฉ Project X รจ interamente nel 2022, non serve specificare lโ€™anno per ogni data.
    • รˆ importante assicurarsi che il numero di tick sullโ€™asse x sia uguale a quello delle relative etichette.
  5. Aggiungere i tick e le etichette dellโ€™asse x.
  6. Aggiungere una griglia verticale.
# 1
fig, ax = plt.subplots()

plt.barh(y=df['task'], width=df['task_duration'], left=df['days_to_start'] + 1)
plt.title('Project Management Schedule of Project X', fontsize=15)

# 2
plt.gca().invert_yaxis()

# 3
xticks = np.arange(5, df['days_to_end'].max() + 2, 7)

# 4
xticklabels = pd.date_range(start=df['start'].min() + dt.timedelta(days=4), end=df['end'].max()).strftime("%d/%m")
# 5
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels[::7])

# 6
ax.xaxis.grid(True, alpha=0.5)

plt.show()

Output:

Asse personalizzato del diagramma di Gantt

Se ti serve piรน pratica con Python per scrivere e leggere qualsiasi codice Python con facilitร , il nostro corso Intermediate Python รจ un buon punto di riferimento.

Colorare le attivitร  per team

Ora, attribuiamo un colore a ciascuna barra (che rappresenta una specifica attivitร ) in base al team a cui รจ assegnata. A questo scopo, faremo quanto segue:

  1. Creare un dizionario con i nomi dei team come chiavi e i colori base di matplotlib come valori.
  2. Creare una figura con sottotrame.
  3. Iterare sulle righe del dataframe, creare una barra per ogni riga e aggiungere il colore corrispondente al team.
  4. Aggiungere tutti gli aggiustamenti di base applicati in precedenza.
# 1
team_colors = {'R&D': 'c', 'Accounting': 'm', 'Sales': 'y', 'IT': 'b'}

# 2
fig, ax = plt.subplots()

# 3
for index, row in df.iterrows():
    plt.barh(y=row['task'], width=row['task_duration'], left=row['days_to_start'] + 1, color=team_colors[row['team']])

# 4
plt.title('Project Management Schedule of Project X', fontsize=15)
plt.gca().invert_yaxis()
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels[::7])
ax.xaxis.grid(True, alpha=0.5)
plt.show()

Output:

Diagramma di Gantt con attivitร  colorate per team

Aggiungere una legenda

Una cosa che manca nellโ€™esempio di diagramma di Gantt sopra รจ una legenda che mostri quale colore corrisponde a quale team. Per risolvere, creiamo delle patch โ€“ oggetti 2D di matplotlib riempiti con un colore predefinito. Useremo la classe matplotlib.patches.Patch per generare un elenco di patch, una per ciascun team, colorate di conseguenza:

patches = []
for team in team_colors:
    patches.append(matplotlib.patches.Patch(color=team_colors[team]))

Ora siamo pronti ad aggiungere una legenda al nostro grafico:

fig, ax = plt.subplots()
for index, row in df.iterrows():
    plt.barh(y=row['task'], width=row['task_duration'], left=row['days_to_start'] + 1, color=team_colors[row['team']])
plt.title('Project Management Schedule of Project X', fontsize=15)
plt.gca().invert_yaxis()
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels[::7])
ax.xaxis.grid(True, alpha=0.5)

# Adding a legend
ax.legend(handles=patches, labels=team_colors.keys(), fontsize=11)

plt.show()

Output:

Diagramma di Gantt con legenda

Il diagramma di Gantt sopra appare molto piรน informativo.

Troverai altre tecniche per migliorare lโ€™estetica e la leggibilitร  dei grafici nel corso Improving Your Data Visualizations in Python.

Aggiungere lo stato di completamento

Finora, non abbiamo usato la completion_days column che abbiamo calcolato allโ€™inizio di questo tutorial. La useremo ora per rendere il nostro diagramma di Gantt piรน informativo mostrando a che punto di completamento si trova ciascuna attivitร .

Tecnicamente, aggiungeremo unโ€™altra barra sopra ciascuna barra giร  costruita. La barra inferiore rappresenterร  la durata complessiva di ciascuna attivitร  in giorni allocati, mentre quella superiore corrisponderร  allo stato di completamento di tale attivitร  in giorni allocati.ย 

Per ciascuna attivitร , entrambe le barre avranno lo stesso colore del relativo team, ma la barra inferiore sarร  piรน chiara di quella superiore per evidenziare la differenza tra le due.

In altre parole, se un team sta overperformando su unโ€™attivitร , la combinazione di queste due barre mostrerร  come se il team avesse giร  lavorato piรน giorni su quellโ€™attivitร  di quanto previsto (il che significa che probabilmente lโ€™attivitร  verrร  completata prima della scadenza).ย 

Nel caso opposto, se un team sta underperformando su unโ€™attivitร , la combinazione delle barre mostrerร  come se il team avesse lavorato meno giorni su quellโ€™attivitร  di quanto previsto (il che significa che probabilmente lโ€™attivitร  verrร  completata dopo la scadenza).

fig, ax = plt.subplots()

for index, row in df.iterrows():

    # Adding a lower bar - for the overall task duration
    plt.barh(y=row['task'], width=row['task_duration'], left=row['days_to_start'] + 1, color=team_colors[row['team']], alpha=0.4)

    # Adding an upper bar - for the status of completion
    plt.barh(y=row['task'], width=row['completion_days'], left=row['days_to_start'] + 1, color=team_colors[row['team']])

plt.title('Project Management Schedule of Project X', fontsize=15)
plt.gca().invert_yaxis()
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels[::7])
ax.xaxis.grid(True, alpha=0.5)
ax.legend(handles=patches, labels=team_colors.keys(), fontsize=11)
plt.show()

Output:

Diagramma di Gantt con stato di completamento

Dal grafico sopra, possiamo vedere che i team non avanzano allo stesso ritmo nel completare le attivitร , cosa comune in molti progetti reali. Per ottenere piรน informazioni da questo grafico, supponiamo che la data attuale sia il 17 novembre 2022 e segniamola sul nostro grafico:

fig, ax = plt.subplots()
for index, row in df.iterrows():
    plt.barh(y=row['task'], width=row['task_duration'], left=row['days_to_start'] + 1, color=team_colors[row['team']], alpha=0.4)
    plt.barh(y=row['task'], width=row['completion_days'], left=row['days_to_start'] + 1, color=team_colors[row['team']])

plt.title('Project Management Schedule of Project X', fontsize=15)
plt.gca().invert_yaxis()
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels[::7])
ax.xaxis.grid(True, alpha=0.5)
ax.legend(handles=patches, labels=team_colors.keys(), fontsize=11)

# Marking the current date on the chart
ax.axvline(x=29, color='r', linestyle='dashed')
ax.text(x=29.5, y=11.5, s='17/11', color='r')

plt.show()

Output:

Diagramma di Gantt con la data attuale

Possiamo fare le seguenti osservazioni sullo stato attuale di Project X:

  • Il team R&D sta overperformando sullโ€™attivitร  F e probabilmente la completerร  prima della scadenza.
  • Il team IT รจ in ritardo sullโ€™attivitร  G e probabilmente ha bisogno di supporto.
  • Il team Sales sta procedendo secondo la pianificazione sullโ€™attivitร  H.
  • Il team Accounting ha iniziato lโ€™attivitร  I in anticipo rispetto alla pianificazione del progetto.

Osservazioni di questo tipo possono aiutare i team leader e il project manager ad adeguare di conseguenza la pianificazione del progetto e allocare tempestivamente le risorse necessarie per evitare ritardi nelle consegne.

Altri possibili aggiustamenti

Possiamo aggiungere ulteriori dettagli al nostro diagramma di Gantt in matplotlib. Ad esempio:

  • Aggiungere la percentuale di completamento su ciascuna barra.
  • Suddividere alcune attivitร  in sotto-attivitร  (abbiamo giร  visto come farlo tecnicamente in precedenza in questo tutorial).
  • Annotare attivitร  correlate.
  • Segnare tappe fondamentali e scadenze cruciali.
  • Evidenziare weekend e festivitร .
  • Ordinare le barre per team o tipo di attivitร .
  • Aggiungere tick minori sullโ€™asse x per aumentare la granularitร  delle informazioni.
  • Migliorare la formattazione e il layout complessivi del grafico.

รˆ importante, tuttavia, mantenere pulito il nostro diagramma di Gantt ed evitare di sovraccaricarlo con troppi dettagli. Come per qualsiasi altra visualizzazione di dati, dobbiamo mantenere il giusto equilibrio tra la capacitร  informativa del grafico e la sua leggibilitร , cosรฌ come la leggibilitร  del codice usato per costruirlo.

Inizia a creare il tuo diagramma di Gantt in Python con Matplotlib

Per riassumere, in questo tutorial abbiamo esplorato:

  • cosโ€™รจ un diagramma di Gantt
  • quali informazioni mostra
  • quando si usa
  • i diversi modi e le sfumature per creare diagrammi di Gantt con matplotlib
  • come creare un diagramma di Gantt in Python con matplotlibย 
  • come regolarlo ulteriormente per renderlo piรน informativo
  • come interpretare il risultato finale.ย 

Inoltre, abbiamo visto vari esempi di diagrammi di Gantt e il processo passo passo per costruirli.

Per un approccio piรน integrato allโ€™apprendimento di come creare grafici efficaci e informativi in Python, dai unโ€™occhiata al nostro skill track Data Visualization with Python.

Argomenti

Correlato