Last chance! 50% off DataCamp Premium
Sale ends in
La visualizzazione dei dati e lo storytelling sono fondamentali per i data scientist, perché trasformano insight complessi in narrazioni coinvolgenti e facili da assimilare, favorendo una comunicazione efficace. Anche se vengono rilasciate librerie sempre nuove e più sofisticate, Matplotlib resta una delle librerie di plotting più popolari e rappresenta le fondamenta di molte di quelle più recenti.
Questo tutorial si concentra su uno dei tipi di grafici più comuni in Matplotlib: il grafico a linee. I grafici a linee sono eccellenti per mettere in evidenza tendenze e oscillazioni dei dati nel tempo, collegando i punti (letteralmente) per dipingere un quadro chiaro di ciò che sta accadendo.
Si parte dalle basi per creare un semplice grafico a linee e si passa poi a tecniche più avanzate, come l’aggiunta di informazioni statistiche ai grafici. Al termine, avrai una solida comprensione di come creare diversi tipi di grafici a linee in Matplotlib e usarli per comunicare in modo efficace i tuoi insight.
Pronto a migliorare le tue competenze di visualizzazione? Iniziamo!
Prima di creare grafici a linee con Matplotlib, dobbiamo configurare l’ambiente. Questo include l’installazione di Matplotlib, l’importazione delle librerie necessarie e il pre-processing del dataset che useremo negli esempi.
Per installare Matplotlib, puoi usare pip, il gestore di pacchetti per Python. Apri un terminale o prompt dei comandi e digita:
pip install matplotlib
Questo installerà l’ultima versione di Matplotlib sulla tua macchina.
Una volta installato Matplotlib, dobbiamo importarlo insieme ad altre librerie necessarie come NumPy e Pandas. NumPy è una libreria per lavorare con gli array, mentre Pandas è dedicata alla manipolazione e all’analisi dei dati.
Per importare queste librerie, digita semplicemente il seguente codice:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
Per questo tutorial useremo un dataset con i prezzi giornalieri dell’indice DJIA. Il dataset include cinque colonne:
Dopo aver caricato il dataset, eseguiremo alcune operazioni di pre-processing di base come rinominare la colonna, convertirla in variabile datetime e ordinare i dati in ordine crescente di data.
Ecco il codice per quanto sopra:
# Load the dataset into a Pandas DataFrame
df = pd.read_csv("HistoricalPrices.csv")
# Rename the column to remove an additional space
df = df.rename(columns = {' Open': 'Open', ' High': 'High', ' Low': 'Low', ' Close': 'Close'})
# Convert the date column to datetime
df['Date'] = pd.to_datetime(df['Date'])
# Sort the dataset in the ascending order of date
df = df.sort_values(by = 'Date')
Ora che abbiamo configurato l’ambiente e caricato il dataset, possiamo passare alla creazione di grafici a linee con Matplotlib.
Inizieremo creando un grafico a linee di base per poi personalizzarlo così da renderlo più presentabile e informativo.
Per creare un grafico a linee useremo la funzione plt.plot(). Questa funzione accetta due parametri: i valori dell’asse x e quelli dell’asse y. Nel nostro caso, la colonna delle date sarà l’asse x, mentre la colonna dei valori di chiusura sarà l’asse y. Ecco il codice:
# Extract the date and close price columns
dates = df['Date']
closing_price = df['Close']
# Create a line plot
plt.plot(dates, closing_price)
# Show the plot
plt.show()
Eseguendo il codice qui sopra, vedrai un grafico a linee di base del titolo DJIA.

Matplotlib offre molte possibilità di personalizzazione, che possiamo sfruttare in base alle nostre esigenze.
Per impostazione predefinita, la funzione plt.plot() traccia una linea blu. Puoi però cambiare il colore passando il parametro color alla funzione. Il parametro color può accettare una stringa con il nome del colore o un codice esadecimale.
Ecco un esempio:
# Tracciare in rosso
plt.plot(dates, closing_price, color='red')
# Show the plot
plt.show()
Questo codice traccerà una linea rossa invece che blu, come mostrato di seguito:

Grafico a linee di base in rosso
Puoi anche cambiare lo spessore della linea passando il parametro linewidth alla funzione plt.plot(). Il parametro linewidth accetta un valore in virgola mobile che rappresenta lo spessore della linea.
Ecco un esempio:
# Aumentare lo spessore della linea
plt.plot(dates, closing_price, linewidth=3)
# Show the plot
plt.show()
Questo codice traccerà una linea con spessore 3 invece del valore predefinito, come mostrato di seguito:

Linee più spesse nel grafico grazie a un linewidth maggiore
Puoi modificare lo stile della linea passando il parametro linestyle alla funzione plt.plot(). Il parametro linestyle accetta una stringa che rappresenta lo stile della linea. La documentazione di Matplotlib fornisce un elenco completo degli stili disponibili.

Ecco come usarli nel codice:
# Tracciare singolarmente linee in solid, dotted, dashed e dashdot
plt.plot(dates, closing_price, linestyle='solid') # Stile predefinito
plt.plot(dates, closing_price, linestyle='dotted')
plt.plot(dates, closing_price, linestyle='dashed')
plt.plot(dates, closing_price, linestyle='dashdot')
# Show the plot
plt.show()
I marker possono essere utilizzati per evidenziare punti specifici nel grafico a linee. Esistono vari simboli utilizzabili come marker, consultabili nella documentazione di Matplotlib.
Ecco un esempio di uso dei marker in un grafico a linee:
# Aggiungere un marker a croce per ogni punto
plt.plot(df['Date'], df['Close'], marker='x')
# Show the plot
plt.show()
Nel codice sopra, usiamo marker a croce (x) per evidenziare i prezzi di Close del titolo DJIA, come mostrato di seguito:

Per rendere il grafico più informativo, possiamo aggiungere le etichette degli assi e un titolo. Possiamo farlo usando rispettivamente le funzioni plt.xlabel(), plt.ylabel() e plt.title().
Ecco un esempio:
plt.plot(dates, closing_price, color='red', linewidth=2)
plt.xlabel('Date')
plt.ylabel('Closing Price')
plt.title('DJIA Stock Price')
# Show the plot
plt.show()
Questo codice traccia una linea rossa con spessore 2, con l’asse x etichettato "Date", l’asse y etichettato "Closing Price" e il titolo "DJIA Stock Price".

Possiamo anche aggiungere le linee della griglia per rendere il grafico più leggibile. Possiamo farlo usando la funzione plt.grid(). La funzione plt.grid() accetta un valore booleano che indica se mostrare la griglia.
Ecco un esempio:
plt.plot(dates, closing_price, color='red', linewidth=2)
plt.xlabel('Date')
plt.ylabel('Closing Price')
plt.title('DJIA Stock Price')
# Add the grid
plt.grid(True)
# Show the plot
plt.show()
Vedrai che la griglia è stata aggiunta al grafico:

In alcuni casi potresti voler tracciare più linee nello stesso grafico. Per farlo, puoi chiamare più volte la funzione plt.plot() con dati diversi per ciascuna chiamata. Ecco un esempio:
# Grafico a linee dei prezzi Open e Close
plt.plot(df['Date'], df['Open'])
plt.plot(df['Date'], df['Close'])
plt.title('DJIA Open and Close Prices')
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()
Nel codice sopra, stiamo tracciando sia i prezzi di Open sia di Close del titolo DJIA sullo stesso grafico.

Potrebbero esserci casi in cui vuoi rappresentare due variabili con scale diverse nello stesso grafico. In queste situazioni, usare assi gemelli è un modo efficace per visualizzare la relazione tra le variabili senza perdere la chiarezza delle singole scale.
Per creare un grafico a linee con assi gemelli, dobbiamo usare la funzione twinx(). Questa funzione crea un nuovo asse y che condivide lo stesso asse x del grafico originale.
Ecco un esempio:
# Create a new variable for demonstration purposes
df['High_minus_Low'] = df['High'] - df['Low']
# Create a basic line plot for the Close prices
fig, ax1 = plt.subplots()
ax1.plot(df['Date'], df['Close'], color='blue', label='Close Price')
ax1.set_xlabel('Date')
ax1.set_ylabel('Closing Price', color='blue')
ax1.tick_params(axis='y', labelcolor='blue')
# Create a twin axis for the High_minus_Low variable
ax2 = ax1.twinx()
ax2.plot(df['Date'], df['High_minus_Low'], color='green', label='High - Low')
ax2.set_ylabel('High minus Low', color='green')
ax2.tick_params(axis='y', labelcolor='green')
# Add a title and show the plot
plt.title('DJIA Stock Price and High-Low Difference with Twin Axes')
plt.show()
Ed ecco il grafico risultante con assi gemelli:

Oltre a visualizzare tendenze e pattern nei dati, i grafici a linee possono mostrare informazioni statistiche come linee di regressione e barre di errore.
Una linea di regressione è la linea che meglio si adatta ai punti in un grafico e può essere usata per modellare e prevedere valori futuri. Possiamo aggiungerla al nostro grafico usando la funzione polyfit() della libreria NumPy, che adatta una regressione polinomiale ai nostri punti dati.
import matplotlib.dates as mdates
# Convert Date column to numeric value
df['Date'] = mdates.date2num(df['Date'])
# Add regression line to plot
coefficients_open = np.polyfit(df['Date'], df['Open'], 1)
p_open = np.poly1d(coefficients_open)
coefficients_close = np.polyfit(df['Date'], df['Close'], 1)
p_close = np.poly1d(coefficients_close)
fig, ax = plt.subplots()
ax.plot(df['Date'], df['Open'], '.', label='Open Price')
ax.plot(df['Date'], p_open(df['Date']), '-', label='Open Regression Line')
ax.plot(df['Date'], df['Close'], '.', label='Close Price')
ax.plot(df['Date'], p_close(df['Date']), '-', label='Close Regression Line')
ax.set_title('DIJA Stock Prices')
ax.set_xlabel('Date')
ax.set_ylabel('Price')
ax.legend()
# Format x-axis labels as dates
date_form = mdates.DateFormatter("%Y-%m-%d")
ax.xaxis.set_major_formatter(date_form)
plt.gcf().autofmt_xdate()
plt.show()
In questo codice, convertiamo prima le date in valori numerici usando la funzione date2num() e poi usiamo la funzione polyfit() per ottenere i coefficienti della linea di regressione. Usiamo la funzione poly1d() per tracciare la linea. Rappresentiamo i punti dati originali con dei punti e la linea di regressione con una linea continua.

Le barre di errore sono una rappresentazione grafica della variabilità dei dati e possono essere utilizzate per indicare l’incertezza nelle misurazioni.
Questo è particolarmente utile quando ti aspetti degli errori nel processo di raccolta dati, come dati sulla temperatura, qualità dell’aria e così via. Anche se i prezzi azionari sono certi, supponiamo un potenziale errore pari a una deviazione standard e tracciamolo usando la funzione errorbar di Matplotlib.
# Calculate standard deviation of data
std = df['Close'].std()
# Add error bars to plot
plt.errorbar(df['Date'], df['Close'], yerr=std/2, fmt='.', label='Close Price')
plt.title('DIJA Stock Prices')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()
In questo codice, calcoliamo innanzitutto la deviazione standard dei prezzi di Close nel nostro dataset. Usiamo poi la funzione errorbar() per aggiungere le barre di errore al grafico a linee, impostando l’ampiezza della barra a metà della deviazione standard.

Queste tecniche ci permettono di aggiungere informazioni statistiche ai nostri grafici a linee e ottenere insight più profondi dai dati.
I grafici a linee sono uno strumento potente per visualizzare tendenze e pattern nei dati, e Matplotlib offre un’interfaccia semplice per crearli.
Come passo successivo, potresti seguire il nostro corso Intermediate Python, in cui applicherai tutto ciò che hai imparato in un case study di hacker statistics.
Speriamo che questo tutorial ti abbia aiutato a iniziare con la creazione di grafici a linee in Matplotlib. Abbiamo anche trattato in modo approfondito gli altri grafici di Matplotlib in un altro tutorial, che può offrirti una panoramica di cos’altro puoi fare con Matplotlib.
Continua a esplorare e a sperimentare per creare visualizzazioni efficaci e far emergere insight dai tuoi dati!

blog
Abid Ali Awan
10 min
blog
Tim Lu
12 min

blog
Abid Ali Awan
15 min