- analiticas
- Posts
- Crea un grafico ad area con Python e Matplotlib
Crea un grafico ad area con Python e Matplotlib
Visualizza la progressione di trend nel tempo con Python.
In questa micro-lezione, vedremo come creare un grafico ad area utilizzando Python, pandas e Matplotlib.
I grafici ad area sono perfetti per mostrare l'andamento di più categorie nel tempo, evidenziando sia i valori individuali che il totale cumulativo.
Il programma della micro-lezione
Le librerie e il dataframe
Per iniziare, importiamo le librerie necessarie:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
Adesso creiamo un semplice dataframe (se ne hai già uno su cui stai lavorando, salta questo passaggio):
data = {
'Anno': [2018, 2019, 2020, 2021, 2022],
'Prodotto A': [30, 35, 10, 45, 50],
'Prodotto B': [20, 25, 40, 35, 40],
'Prodotto C': [10, 15, 20, 25, 30]
}
df = pd.DataFrame(data)
Ecco come appare il nostro dataframe:
Anno | Prodotto A | Prodotto B | Prodotto C |
---|---|---|---|
2018 | 30 | 20 | 10 |
2019 | 35 | 25 | 15 |
2020 | 40 | 30 | 20 |
2021 | 45 | 35 | 25 |
2022 | 50 | 40 | 30 |
Costruiamo il grafico ad area
Ora che abbiamo i nostri dati, possiamo procedere con la creazione del grafico ad area.
Per prima cosa, impostiamo la colonna “Anno” come indice del nostro dataframe:
df.set_index('Anno', inplace=True)
Ora creiamo un semplice grafico ad area, specificando soltanto le sue dimensioni (con il parametro figsize
) e la trasparenza dei colori (con il parametro alpha
):
ax = df.plot.area(figsize=(10, 6), alpha=0.5)
plt.show()
Ed ecco qui il nostro grafico:

Miglioriamo il grafico
Adesso cercheremo di migliorare e personalizzare il nostro grafico.
Sistemiamo l’asse delle x
Il primo grande problema da risolvere riguarda l’asse delle ascisse (l’asse delle x). Matplotlib lo raffigura ad intervalli di 0,5. Nel nostro caso, vogliamo invece degli intervalli pari a 1, in modo da avere un segno per ogni anno.
Per farlo, possiamo creare due variabili corrispondenti al valore minimo e massimo della nostra colonna “Anno”.
Se lo fai prima di aver reso la colonna “Anno” l’indice del dataframe, puoi fare così:
minimo = df['Anno'].min()
massimo = df['Anno'].max()
Se invece la colonna “Anno” è già l’indice del dataframe, dovrai fare così:
minimo = df.index.min()
massimo = df.index.max()
Dopo aver costruito il nostro grafico, specificheremo il parametro xticks
, in modo da definire l’intervallo dei valori raffigurati sull’asse delle x.
In questo caso, vogliamo che l’asse delle ascisse vada dal valore minimo della colonna “Anno” fino al suo massimo più uno (per lasciarci un po’ di margine). Inoltre, vogliamo raffigurare i valori dell’asse delle x con un anno di intervallo tra ognuno di essi.
# Costruiamo il grafico
ax = df.plot.area(figsize=(10, 6), alpha=0.5)
# Personalizziamo l'asse delle x
plt.xticks(np.arange(minimo, massimo+1, 1))
# Raffiguriamo il grafico
plt.show()
Ed ecco qui il nostro grafico:

Finalmente l’asse delle x si comporta come dovrebbe!
Nota bene
La creazione delle variabili massimo
e minimo
non è obbligatoria per fare quanto mostrato qui sopra.
Infatti, sarebbe stato possibile recuperare il valore minimo e massimo della colonna “Anno” direttamente all’interno del comando np.arange()
.
Tuttavia, la creazione delle variabili aumenta la leggibilità e l’eleganza del codice.
Aggiungiamo degli elementi di testo
In questa sezione vedremo come:
Aggiungere un titolo generale che spieghi cosa raffigura il grafico
Personalizzare il titolo degli assi specificandone il testo e la grandezza del carattere
Impostare la grandezza per i caratteri della legenda (sia per il titolo che per i valori) e posizionarla fuori dall’area del grafico
Procediamo:
# Titolo generale
plt.title('Vendite dei prodotti nel tempo', fontsize=16)
# Titolo dell'asse delle x
plt.xlabel('Anno', fontsize=12)
# Titolo dell'asse delle y
plt.ylabel('Unità vendute', fontsize=12)
# Legenda
plt.legend(title='Prodotti', title_fontsize='12', fontsize='10', bbox_to_anchor = (1, 1.01))
Ed ecco qui il nostro grafico:

Modifiche avanzate
Se vuoi personalizzare ulteriormente il tuo grafico, ti consiglio di leggere la micro-lezione sui 6 comandi per personalizzare i grafici con Matplotlib.
In questo approfondimento imparerai a cambiare il tema del tuo grafico, scegliere una palette di colori personalizzata, aggiungere una griglia e molto altro.
Il codice per il grafico ad area
Ecco qui il codice completo che abbiamo usato per ottenere il grafico ad area costruito in questa micro-lezione:
# Librerie
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Dataframe
data = {
'Anno': [2018, 2019, 2020, 2021, 2022],
'Prodotto A': [30, 35, 10, 45, 50],
'Prodotto B': [20, 25, 40, 35, 40],
'Prodotto C': [10, 15, 20, 25, 30]
}
df = pd.DataFrame(data)
# Variabili
minimo = df['Anno'].min()
massimo = df['Anno'].max()
# Indice
df.set_index('Anno', inplace=True)
# Grafico base
ax = df.plot.area(figsize=(10, 6), alpha=0.5)
# Personalizzazioni
## Range dell'asse x
plt.xticks(np.arange(minimo, massimo+1, 1))
## Titolo generale
plt.title('Vendite dei prodotti nel tempo', fontsize=16)
## Titolo dell'asse delle x
plt.xlabel('Anno', fontsize=12)
## Titolo dell'asse delle y
plt.ylabel('Unità vendute', fontsize=12)
## Legenda
plt.legend(title='Prodotti', title_fontsize='12', fontsize='10', bbox_to_anchor = (1, 1.01))
# Mostrare il grafico
plt.show()
Alla prossima micro-lezione 👋