HOWTO · Matplotlib

Cambia lo spazio tra le sottotrame in Matplotlib

Usa tight_layout(), subplots_adjust(), subplot_tool() o constrained_layout=True per migliorare la spaziatura nelle figure Matplotlib con molte sottotrame.

In questa pagina

Per rendere più leggibile una figura Matplotlib con molti sotto-grafici, scegli il controllo del layout più adatto al tuo flusso di lavoro: chiama tight_layout() per adattare automaticamente le decorazioni dei sotto-grafici, usa plt.subplots_adjust() per impostare spazi e margini della figura, apri plt.subplot_tool() per regolare il layout in modo interattivo oppure abilita constrained_layout=True quando crei i sotto-grafici. Questi controlli modificano il layout; se ogni asse ha bisogno di più spazio, valuta anche di aumentare le dimensioni della figura o di cambiare il numero di righe e colonne.

Usa tight_layout() per evitare sovrapposizioni tra i sotto-grafici

Chiama fig.tight_layout() dopo aver aggiunto grafici, etichette e titoli. Questa funzione modifica la posizione dei sotto-grafici per lasciare spazio a elementi come le etichette degli assi e i titoli. È una buona prima scelta quando la disposizione predefinita è troppo affollata, anche se non risolve ogni problema, soprattutto nelle figure con decorazioni complesse.

Questo esempio completo crea quattro grafici con titolo in una griglia di 2 righe e 2 colonne, quindi applica la regolazione automatica:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 3, 100)
series = [
    (np.sin(x), "Sine function"),
    (np.cos(x), "Cosine function"),
    (1 / (1 + np.exp(-x)), "Sigmoid function"),
    (np.exp(x), "Exponential function"),
]

fig, axes = plt.subplots(2, 2)
for ax, (values, title) in zip(axes.flat, series):
    ax.plot(x, values)
    ax.set_title(title)

fig.tight_layout()
plt.show()

Esegui l’esempio in un ambiente Python con NumPy e Matplotlib installati. Il layout viene regolato dopo aver aggiunto i titoli e i dati rappresentati.

Imposta spazi e margini dei sotto-grafici con plt.subplots_adjust()

Usa plt.subplots_adjust() quando vuoi controllare direttamente gli spazi tra gli assi o quello attorno alla griglia. wspace imposta la distanza orizzontale come frazione della larghezza media degli assi; hspace imposta quella verticale come frazione della loro altezza media. I valori left, right, bottom e top definiscono i bordi dell’area dei sotto-grafici come frazioni della larghezza o dell’altezza della figura.

L’esempio seguente usa la stessa disposizione con quattro grafici e aumenta lo spazio tra le righe. I titoli visualizzati nei grafici restano in inglese, come nel codice invariato:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 3, 100)
series = [
    (np.sin(x), "Sine function"),
    (np.cos(x), "Cosine function"),
    (1 / (1 + np.exp(-x)), "Sigmoid function"),
    (np.exp(x), "Exponential function"),
]

fig, axes = plt.subplots(2, 2)
for ax, (values, title) in zip(axes.flat, series):
    ax.plot(x, values)
    ax.set_title(title)

fig.subplots_adjust(left=0.12, right=0.95, bottom=0.12, top=0.9, wspace=0.25, hspace=0.4)
plt.show()

Aumenta wspace o hspace per allargare i rispettivi spazi. Modifica i quattro valori dei bordi per riservare più spazio attorno alla griglia, per esempio quando le etichette ne hanno bisogno. Queste impostazioni controllano il layout degli assi all’interno della figura; se vuoi più spazio per l’intera figura, modifica figsize in plt.subplots().

Regola interattivamente il layout dei sotto-grafici con plt.subplot_tool()

plt.subplot_tool() apre una finestra Matplotlib con controlli per regolare gli spazi e i margini dei sotto-grafici. È utile quando vuoi perfezionare visivamente una figura e poi riportare nel tuo script i valori scelti. Lo strumento richiede un backend Matplotlib interattivo e un ambiente grafico: non serve per modificare un’immagine statica o una sessione di plotting senza interfaccia grafica.

In una sessione interattiva con interfaccia grafica, crea la figura e chiama plt.subplot_tool(fig) passandole quella figura. Questa chiamata dipende da un gestore della canvas Matplotlib con una barra degli strumenti associata; i backend non interattivi, come quello usato per il rendering senza interfaccia grafica, non forniscono tale barra e quindi lo strumento non può essere avviato. L’esempio interattivo non è presentato come uno script eseguibile in modalità headless.

Usa i controlli dello strumento per modificare i parametri dei sotto-grafici mentre osservi la figura. Quando la disposizione è soddisfacente, imposta nel codice i valori corrispondenti di wspace, hspace e dei margini con plt.subplots_adjust() per ottenere risultati ripetibili.

Abilita constrained_layout=True quando crei i sotto-grafici

Per una figura che deve disporre automaticamente gli spazi durante il disegno, passa constrained_layout=True quando chiami plt.subplots(). Il motore di layout tiene conto delle decorazioni dei sotto-grafici, come titoli ed etichette. Abilita questa opzione quando crei la figura: è pensata per gestirne il layout durante il disegno, ma decorazioni complesse possono richiedere comunque regolazioni manuali. Per maggiori dettagli, consulta la guida di Matplotlib al constrained layout.

import numpy as np
import matplotlib.pyplot as plt

a = np.linspace(0, 5, 100)
figure, axes = plt.subplots(2, 2, constrained_layout=True)

axes[0, 0].plot(a, np.exp(a))
axes[0, 1].plot(a, np.sin(a))
axes[1, 0].plot(a, np.cos(a))
axes[1, 1].plot(a, a ** 2)

for index, ax in enumerate(axes.flat, start=1):
    ax.set_title(f"Subplot {index}")

plt.show()

Tutti e quattro gli approcci aiutano a gestire il layout dei sotto-grafici, ma si adattano a flussi di lavoro diversi: usa tight_layout() per un adattamento automatico rapido dopo aver aggiunto i contenuti, plt.subplots_adjust() per impostare valori espliciti, plt.subplot_tool() per la regolazione interattiva e constrained_layout=True quando crei una figura che deve gestire automaticamente gli spazi.