24. Introduzione a Matplotlib#

Matplotlib è la libreria di riferimento per la creazione di grafici in Python. Si tratta di una libreria molto potente e ben documentata (https://matplotlib.org/). Vediamo alcuni esempi classici di utilizzo della libreria.

24.1. Plot bidimensionale#

Vediamo come stampare la funzione:

\[ y = x^2. \]

Per stampare la funzione, dovremo fornire a matplotlib una serie di coppi di valori \((x,y)\) che verfichino l’equazione riportata sopra. Il modo più semplice per farlo consiste nel:

  • Definire un vettore arbitrario di valori \(x\) estratti dal dominio della funzione;

  • Calcolare i rispettivi punti \(y\) utilizzando la forma analitica riportata sopra;

  • Eseguire il plot dei valori mediante matplotlib.

I due vettori possono essere definiti così:

import numpy as np

x = np.linspace(-100,100,300) #campioniamo in maniera lineare 300 punti tra -100 e 100
y = x**2 #calcoliamo il quadrato di ognuno dei punti di x

Procediamo alla stampa:

from matplotlib import pyplot as plt #importo il modulo pyplot da matplotlib e lo chiamo plt

plt.plot(x,y) #stampa le coppie x,y come punti nello spazio cartesiano
plt.xlabel('x') #imposta una etichetta per l'asse x
plt.ylabel('y') #imposta una etichetta per l'asse y
plt.title('Il mio grafico') #imposta il titolo del grafico
plt.show() #mostra il grafico
../_images/748a334c8fa426d74a4603d3b3fcd5a03c8747cad626f01780e6752b91d7d37d.png

E’ possibile controllare diversi aspetti del plot, tra cui i limiti degli assi x e y, la posizione dei “tick” (le lineette che orizzontali e verticali sugli assi) o aggiungere una griglia. Vediamo qualche esempio:

plt.plot(x,y) #stampiamo lo stesso plot
plt.xlim([-50,50]) #visualizziamo i valori x solo tra -20 e 40
plt.ylim([0,2500]) #e i valori y solo tra 0 e 4000
plt.xticks([-40,0,40]) #inseriamo solo -40, 0 e 40 come "tick" sull'asse x
plt.yticks([1000,2000]) #solo 1000 e 2000 come tick y
plt.grid() #aggiungiamo una griglia
plt.show()
../_images/31b5184ed716612e8d7c3a9e1050b4997c4bef96fe155f1ff54ed2316be9700f.png

24.2. Subplot#

Spesso può essere utile confrontare diversi grafici. Per fare ciò, possiamo avvalerci della funzione subplot, che permette di costruire una “griglia di grafici”.

Vediamo ad esempio come stampare le seguenti funzioni in una griglia 2 x 2:

\[ y=x^2, \ \ \ y=log(x), \ \ \ y=x^2 \cdot log(x), \ \ \ y=log(x)/x \]
plt.figure(figsize=(16,10)) #definisce una figura con una data dimensione (in pollici)
plt.subplot(2,2,1) #definisce una griglia 2x2 e seleziona la prima cella come cella corrente
x = np.linspace(-100,100,300)
plt.plot(x**2) #primo grafico
plt.title('x^2') #imposta un titolo per la cella corrente

plt.subplot(2,2,2) #sempre nella stessa grliglia 2x2, seleziona la seconda cella
x = np.linspace(1,100,300)
plt.plot(np.log(x)) #secondo grafico
plt.title('log(x)') #imposta un titolo per la cella corrente

plt.subplot(2,2,3) #seleziona la terza cella
x = np.linspace(1,100,300)
plt.plot(x**2*np.log(x)) #terzo grafico
plt.title('x^2 log(x)') #imposta un titolo per la cella corrente

plt.subplot(2,2,4) #seleziona la quarta cella
x = np.linspace(1,100,300)
plt.plot(np.log(x)/x) #quarto grafico
plt.title('log(x)/x') #imposta un titolo per la cella corrente

plt.show() #mostra la figura
../_images/805e66c91975c053cb568c94ca73b89882f3d0a16e7620616201eadb415a0bac.png

24.3. Colori e stili#

E’ possibile utilizzare diversi colori e stili per i grafici. Sotto alcuni esempi:

x = np.linspace(-2*np.pi,2*np.pi,50)
y = np.sin(x)

plt.figure(figsize=(16,8))
plt.subplot(231) #versione abbreviata di plt.subplot(2,3,1)
plt.plot(x,y,'--') #linea tratteggiata
plt.subplot(232)
plt.plot(x,y,'.') #solo punti
plt.subplot(233)
plt.plot(x,y,'r', linewidth=2) #linea rossa, spessore 2
plt.subplot(234)
plt.plot(x,y,'o') #cerchietti
plt.subplot(235)
plt.plot(x,y,'o-g') #cerchietti uniti da linee verdi
plt.subplot(236)
plt.plot(x,y,'o--', linewidth=0.5) #cerchietti uniti da linee tratteggiate, spessore 0.5

plt.show()
../_images/e2c2425872911da283c3a6924206e01bacd6c555ba64e6f4c4cfa622b5eacb25.png

24.4. Sovrapposizione di linee e legenda#

E’ semplice sovrapporre più linee mediante matplotlib:

plt.figure()
plt.plot(x,x**2)
plt.plot(x,x**3) #al secondo plot, matplotlib cambierà automaticamente colore
plt.legend(['x^2','x^3']) #possiamo anche inserire una legenda. 
#GLi elementi della legenda verranno associati alle linee nell'ordine in cui sono stati plottati
plt.show()
../_images/bac78a62404d3a6e8ecea5e5d763297ef34d6f130bde1990d7834d49a94ebbe5.png

24.5. Griglie#

È spesso utile sovrapporre una griglia ai propri grafici. Ciò può essere fatto mediante plt.grid():

plt.figure()
plt.plot(x,x**2)
plt.plot(x,x**3) #al secondo plot, matplotlib cambierà automaticamente colore
plt.legend(['x^2','x^3']) #possiamo anche inserire una legenda. 
#GLi elementi della legenda verranno associati alle linee nell'ordine in cui sono stati plottati
plt.grid()
plt.show()
../_images/b3beed067913fbf8f7e9352f7520a1ab521526697af4f5c9629b66838c8153f3.png

Matplotlib è una librerira molto versatile. Sul sito ufficiale di Matplotlib è presente una galleria di esempi di plot con relativo codice (https://matplotlib.org/stable/gallery/index.html). Vedremo più in dettaglio come ottenere visualizzazioni più complesse durante il corso.

24.6. Esercizi#

🧑‍💻 Esercizio 1

Si scriva il codice per ottenere il seguente grafico:

image.png