HOWTO · Matplotlib
Imposta i valori dell'asse X in Matplotlib
Questo tutorial mostra come possiamo impostare i valori dell'asse X usando matplotlib.pyplot.xticks() in Matplotlib.
In questa pagina
Usa matplotlib.pyplot.xticks() per scegliere dove compaiono le tacche dell’asse X e, facoltativamente, quale testo mostrare in corrispondenza di ciascuna posizione. Le posizioni delle tacche indicano le coordinate orizzontali: non modificano i dati rappresentati né impostano il titolo dell’asse. Per ottenere un grafico leggibile, fai corrispondere ogni etichetta alla posizione e al punto dati che descrive.
Impostare le posizioni e le etichette delle tacche dell’asse X
Il primo argomento di xticks() è una sequenza di posizioni. Il secondo argomento, facoltativo, fornisce un’etichetta per ciascuna posizione. Le due sequenze devono avere la stessa lunghezza e lo stesso ordine. L’esempio seguente mostra in un’unica figura etichette personalizzate, spaziatura numerica, un’alternativa con indici equidistanti e un numero ridotto di etichette di categoria ruotate.
import matplotlib.pyplot as plt
x = [1, 2, 5, 9]
y = [3, 5, 4, 8]
labels = ['Jan', 'Feb', 'May', 'Sep']
categories = ['North region', 'South region', 'East region', 'West region', 'Central region']
values = [12, 9, 14, 7, 11]
fig, axes = plt.subplots(2, 2, figsize=(10, 7))
axes[0, 0].plot(x, y, marker='o')
axes[0, 0].set_title('Custom labels')
axes[0, 0].set_xlabel('Month')
axes[0, 0].set_ylabel('Value')
plt.sca(axes[0, 0])
plt.xticks(x, labels)
axes[0, 1].plot(x, y, marker='o')
axes[0, 1].set_title('Numeric spacing')
axes[0, 1].set_xlabel('X value')
axes[0, 1].set_ylabel('Value')
index_positions = list(range(len(x)))
axes[1, 0].plot(index_positions, y, marker='o')
axes[1, 0].set_title('Evenly spaced positions')
axes[1, 0].set_xlabel('Month')
axes[1, 0].set_ylabel('Value')
axes[1, 0].set_xticks(index_positions)
axes[1, 0].set_xticklabels(labels)
axes[1, 1].bar(categories, values)
axes[1, 1].set_title('Fewer, rotated category labels')
axes[1, 1].set_ylabel('Value')
axes[1, 1].set_xticks([0, 2, 4])
axes[1, 1].set_xticklabels(categories[::2])
plt.sca(axes[1, 1])
plt.xticks(rotation=35, ha='right')
fig.tight_layout()
plt.show()
Il grafico in alto a sinistra abbina quattro posizioni a quattro etichette con i nomi dei mesi. Il grafico numerico usa i valori x effettivi, quindi la distanza tra 2 e 5 è maggiore di quella tra 1 e 2. Nel grafico in basso a sinistra vengono invece usate le posizioni da 0 a 3: i mesi risultano così equidistanti sul grafico e ogni valore resta associato al mese corrispondente. L’ultimo grafico mostra cinque barre e, per ridurre l’affollamento, aggiunge etichette solo alle posizioni 0, 2 e 4, ruotandole e allineandole a destra. Le etichette visibili nell’esempio invariato restano in inglese. Esegui lo script in un ambiente Python con Matplotlib installato; qui non sono inclusi risultati acquisiti.
Gestire valori X non equidistanti
Un asse numerico rappresenta le distanze numeriche. Se le misurazioni si trovano ai valori x 1, 2, 5 e 9, tracciarle usando quei valori lascia correttamente intervalli più ampi tra 2 e 5 e tra 5 e 9. Impostare i nomi dei mesi come etichette delle tacche non cambia queste coordinate. Mantieni tale spaziatura quando la distanza o il tempo trascorso sono rilevanti.
Se vuoi confrontare categorie a intervalli uguali, traccia i valori y rispetto a posizioni d’indice come range(len(x)), quindi usa i nomi delle categorie come etichette delle tacche. La sequenza dei dati e quella delle etichette devono rispettare lo stesso ordine. In questo modo la scala orizzontale passa dalla distanza numerica all’ordine delle categorie: questa soluzione non è adatta quando gli intervalli tra le misurazioni numeriche hanno un significato.
Per etichette che rappresentano date, usa valori di data come dati x tracciati e formatta le tacche delle date secondo necessità; assegnare nomi di mesi a coordinate numeriche non correlate non le trasforma in date.
Controllare la frequenza delle tacche e migliorare la leggibilità delle etichette
In un grafico piccolo, passa posizioni esplicite a xticks() per mostrare solo alcune tacche. Per esempio, plt.xticks(x[::2]) seleziona un valore ogni due da una sequenza ordinata. Quando usi una scala numerica regolare, un locator può scegliere un intervallo adeguato al variare della vista; per esempio, importa MultipleLocator da matplotlib.ticker e chiama ax.xaxis.set_major_locator(MultipleLocator(2)) per richiedere tacche principali ogni due unità. Scegli posizioni esplicite quando le etichette rappresentano categorie significative e un locator quando l’asse è numerico.
Puoi ruotare le etichette lunghe con plt.xticks(rotation=35, ha='right'); ha ne imposta l’allineamento orizzontale. Se le etichette ruotate si sovrappongono ancora, aumenta la larghezza della figura o riduci il numero di tacche. tight_layout() può creare spazio attorno agli assi, ma non stabilisce quali tacche siano appropriate.
Nell’esempio precedente, per la maggior parte dei pannelli si usa set_xticks sui singoli assi, mentre xticks viene applicato all’asse corrente per personalizzare le etichette. Con lo stile orientato agli oggetti, ax.set_xticks(positions, labels) associa l’operazione a un asse specifico. Con pyplot, seleziona prima l’asse desiderato se la figura contiene più grafici.
FAQ: impostare i valori dell’asse X
Posso impostare posizioni ed etichette con una sola chiamata? Sì. Passa entrambe le sequenze a plt.xticks(positions, labels) oppure usa ax.set_xticks(positions, labels). Ogni etichetta corrisponde, in base all’indice, alla posizione associata.
Come posso mostrare meno tacche? Fornisci un elenco più corto di posizioni oppure usa un locator per le tacche numeriche regolarmente distanziate. La frequenza delle tacche è indipendente dal numero di punti dati tracciati.
Posso usare categorie testuali sull’asse X? Sì. Puoi tracciare direttamente i valori delle categorie, come nel grafico a barre, oppure tracciare posizioni numeriche d’indice e assegnare i nomi delle categorie come etichette. Usa la seconda soluzione quando ti serve un ordine specifico delle categorie o una spaziatura uniforme.
Cosa posso provare se le etichette si sovrappongono? Mostra meno etichette, ruotale, allinea a destra il testo ruotato oppure aumenta la larghezza della figura. Queste modifiche riguardano le etichette delle tacche e non alterano i valori tracciati.