• 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.

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 👋