Sottotrame
La funzione subplots()
di pyplot
svolge proprio questo scopo specifico. È stata utilizzata in precedenza per creare una tela nella prima sezione e ora verrà esaminata più nel dettaglio.
Righe e Colonne
Gli argomenti più importanti di questa funzione sono nrows
e ncolumns
, che impostano il numero di righe e colonne nella griglia dei subplot. Per impostazione predefinita, entrambi sono 1, quindi si ottiene un singolo grafico (Axes
).
La funzione subplots()
restituisce un oggetto Figure
e un singolo oggetto Axes
oppure un array di oggetti Axes
, a seconda della dimensione della griglia.
import matplotlib.pyplot as plt fig, axs = plt.subplots(2, 2) plt.show()
È stata creata una griglia di sottotrame 2 per 2.
Poiché ci sono più sottotrame, subplots
restituisce un array di oggetti Axes
, solitamente memorizzato in una variabile chiamata axs
(il singolare ax
si usa per un solo grafico).
In questo caso, axs
è un array bidimensionale, quindi sono necessari sia l'indice di riga che quello di colonna per accedere a una sottotrama specifica.
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Creating a 2x2 subplot grid fig, axs = plt.subplots(2, 2) # Creating a different plot for each Axes object axs[0, 0].plot(data_linear) axs[0, 1].plot(data_squared) axs[1, 0].scatter(data_linear, data_linear) axs[1, 1].scatter(data_linear, data_squared) plt.show()
La prima riga (riga 0) contiene due grafici a linee, mentre la seconda riga (riga 1) contiene due grafici a dispersione.
Poiché ogni grafico è posizionato su un subplot separato, non è possibile utilizzare direttamente plt.plot()
o plt.scatter()
. L'approccio corretto è chiamare il metodo corrispondente su ciascun oggetto Axes
individuale.
Conversione in array 1D
È anche possibile utilizzare il metodo .ravel()
per convertire un array 2D di oggetti Axes
in un array appiattito contiguo 1D:
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Creating a 2x2 subplot grid fig, axs = plt.subplots(2, 2) # Flattening axs to a 1D array for easier indexing axs = axs.ravel() # Creating a different plot for each Axes object axs[0].plot(data_linear) axs[1].plot(data_squared) axs[2].scatter(data_linear, data_linear) axs[3].scatter(data_linear, data_squared) plt.show()
Con un array 2x2, axs.ravel()
lo converte in un array 1D contenente quattro elementi.
Condivisione di un asse
La funzione subplots()
dispone anche dei parametri sharex
e sharey
. Essi controllano se gli assi x o y sono condivisi tra i subplot. Entrambi sono impostati su False
per impostazione predefinita.
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Create a 2x2 subplot grid with shared x-axis across all subplots fig, axs = plt.subplots(2, 2, sharex=True) # Flatten axs array for easier indexing axs = axs.ravel() # Plotting different data on each subplot axs[0].plot(data_linear) axs[1].plot(data_squared) axs[2].scatter(data_linear, data_linear) axs[3].scatter(data_linear, data_squared) plt.show()
Impostando sharex=True
si condivide l'asse x tra tutti i sottografi, il che è utile in questo caso perché tutti i sottografi utilizzano gli stessi valori sull'asse x.
È anche possibile impostare sharex
o sharey
su 'row'
per condividere l'asse all'interno di ogni riga di sottografi, oppure su 'col'
per condividerlo all'interno di ogni colonna di sottografi.
Come sempre, sentiti libero di approfondire nella
documentazione di subplots()
se desideri approfondire l'argomento.
Swipe to start coding
- Utilizzare la funzione corretta per creare una griglia di subplot.
- La griglia deve avere 3 righe e 1 colonna (specificare i primi due parametri).
- Specificare l'argomento keyword più a destra, in modo che l'asse x sia condiviso tra tutti i subplot.
- Salvare il risultato della funzione per la creazione dei subplot nelle variabili
fig
eaxs
(da sinistra a destra). - Posizionare il primo grafico a linee per
data_linear
nella prima riga (riga0
) della griglia di subplot. - Posizionare il secondo grafico a linee per
data_squared
nella seconda riga (riga1
) della griglia di subplot. - Posizionare il terzo grafico a linee per
data_exp
nella terza riga (riga2
) della griglia di subplot.
Soluzione
Grazie per i tuoi commenti!