W3docs

Etichette Matplotlib

Impara ad aggiungere etichette agli assi, titoli, leggende e annotazioni di testo in Matplotlib con esempi Python pratici.

Le etichette trasformano un grafico grezzo in una storia leggibile. Questo capitolo tratta ogni elemento di etichettatura principale in Matplotlib: etichette degli assi, titoli del grafico, leggende, etichette dei tick e annotazioni di testo. Per ogni elemento troverai la funzione essenziale, i parametri più utili ed esempi pratici che puoi eseguire immediatamente.

Prima di iniziare, assicurati che Matplotlib sia installato. Consulta Matplotlib Getting Started per le istruzioni di configurazione.

Impostare le etichette degli assi

Le funzioni xlabel() e ylabel() aggiungono testo descrittivo agli assi orizzontale e verticale. Entrambe accettano gli stessi parametri.

import matplotlib.pyplot as plt

height = [63, 64, 65, 66, 67, 68, 69, 70, 71, 72]
weight = [127, 130, 133, 136, 139, 142, 145, 148, 151, 154]

plt.scatter(height, weight)
plt.xlabel('Height (inches)')
plt.ylabel('Weight (pounds)')
plt.show()

Personalizzare l'aspetto delle etichette

Entrambe le funzioni accettano un argomento fontsize (in punti) e qualsiasi parola chiave della classe Text di Matplotlib, come color, fontweight e fontstyle.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.plot(x, y)
plt.xlabel('Time (seconds)', fontsize=13, color='steelblue', fontweight='bold')
plt.ylabel('Distance (meters)', fontsize=13, color='steelblue', fontweight='bold')
plt.show()

Regolare il padding delle etichette

Usa il parametro labelpad per allontanare un'etichetta dai segni di tick dell'asse — utile quando le etichette dei tick sono lunghe o ruotate.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [1000, 2000, 3000, 4000, 5000]

plt.plot(x, y)
plt.xlabel('Quarter', labelpad=12)
plt.ylabel('Revenue ($)', labelpad=16)
plt.show()

Aggiungere un titolo al grafico

La funzione title() aggiunge un titolo centrato sopra il grafico per impostazione predefinita.

import matplotlib.pyplot as plt

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
sales = [25000, 30000, 45000, 35000, 50000, 60000,
         70000, 80000, 90000, 100000, 110000, 120000]

plt.plot(months, sales)
plt.title('Monthly Sales')
plt.xlabel('Month')
plt.ylabel('Sales ($)')
plt.show()

Posizionamento e stile del titolo

Passa loc ('left', 'center', 'right') per modificare l'allineamento orizzontale, e pad per controllare lo spazio tra il titolo e la parte superiore del grafico.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [3, 7, 2, 9, 4]

plt.plot(x, y, marker='o')
plt.title('Sensor Readings', loc='left', pad=14,
          fontsize=15, fontweight='bold', color='darkslategray')
plt.show()

Titolo a livello di figura con suptitle()

Quando una figura contiene più sottografici, usa suptitle() per aggiungere un titolo che si estende su tutti. I singoli sottografici possono comunque avere il loro title().

import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 3))

ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Product A')

ax2.plot([1, 2, 3], [6, 5, 4])
ax2.set_title('Product B')

fig.suptitle('Q1 Sales Comparison', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()

tight_layout() impedisce al titolo della figura di sovrapporsi al contenuto dei sottografici. Consulta Matplotlib Subplots per una trattazione completa delle figure multi-pannello.

Personalizzare la legenda

Una legenda identifica le serie di dati nel grafico. Chiama legend() dopo aver tracciato le serie.

Legenda di base

Passa una parola chiave label a ogni chiamata di tracciamento, poi chiama plt.legend() per renderizzarla.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]

plt.plot(x, [2, 4, 6, 8, 10], label='Series A')
plt.plot(x, [1, 3, 5, 7, 9],  label='Series B')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('Two Series')
plt.show()

Posizione della legenda

Passa il parametro loc per posizionare la legenda con precisione. Valori comuni: 'upper left', 'upper right', 'lower left', 'lower right', 'center', o 'best' (Matplotlib sceglie la posizione con minore sovrapposizione — il valore predefinito).

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]

plt.plot(x, [2, 4, 6, 8, 10], label='Revenue')
plt.plot(x, [1, 2, 3, 4, 5],  label='Costs')
plt.legend(loc='upper left')
plt.show()

Legenda fuori dagli assi

Usa bbox_to_anchor insieme a loc per posizionare la legenda al di fuori dell'area del grafico. Chiama tight_layout() o regola subplots_adjust in modo che la legenda non venga ritagliata.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
fig, ax = plt.subplots()

ax.plot(x, [1, 4, 9, 16],  label='Quadratic')
ax.plot(x, [1, 8, 27, 64], label='Cubic')
ax.legend(loc='upper left', bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()

Stile della legenda

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]

plt.plot(x, [2, 4, 6, 8, 10], label='Actual')
plt.plot(x, [1, 3, 5, 7, 9],  label='Forecast', linestyle='--')
plt.legend(
    title='Data',
    fontsize=11,
    title_fontsize=12,
    framealpha=0.9,
    edgecolor='gray',
)
plt.show()

framealpha controlla l'opacità del riquadro della legenda (0 = trasparente, 1 = solido). title aggiunge un'intestazione all'interno del riquadro della legenda.

Personalizzare le etichette dei tick

Le etichette dei tick sono i numeri o le stringhe che Matplotlib stampa lungo ciascun asse. Usa xticks() e yticks() per sovrascriverle.

Ruotare le etichette dei tick

I nomi di categoria lunghi si sovrappongono per impostazione predefinita. Ruotali con il parametro rotation.

import matplotlib.pyplot as plt

categories = ['January', 'February', 'March', 'April', 'May', 'June']
values = [12, 19, 14, 22, 18, 25]

plt.bar(categories, values)
plt.xticks(rotation=45, ha='right')
plt.ylabel('Units sold')
plt.title('Monthly Sales')
plt.tight_layout()
plt.show()

ha='right' allinea il bordo destro di ogni etichetta con il suo segno di tick, che risulta più ordinato dopo la rotazione.

Impostare valori e etichette dei tick personalizzati

Passa due liste a xticks(): le posizioni dei tick e le stringhe da visualizzare.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))

ticks = [0, np.pi / 2, np.pi, 3 * np.pi / 2, 2 * np.pi]
labels = ['0', 'π/2', 'π', '3π/2', '2π']
plt.xticks(ticks, labels, fontsize=12)
plt.ylabel('sin(x)')
plt.title('Sine Wave with Custom Tick Labels')
plt.show()

Stilizzare il font delle etichette dei tick

Sia xticks() che yticks() accettano argomenti con parole chiave per il font direttamente.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 30, 25]

plt.plot(x, y)
plt.xticks(fontsize=12, color='steelblue')
plt.yticks(fontsize=12, color='steelblue')
plt.show()

Aggiungere annotazioni di testo

La funzione text() posiziona una stringa in una posizione arbitraria all'interno del sistema di coordinate degli assi.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 3, 6, 5]

plt.plot(x, y, marker='o')
plt.text(3, 3.2, 'dip here', fontsize=11, color='crimson')
plt.title('Text Annotation Example')
plt.show()

I primi due argomenti sono le coordinate x e y in unità dati.

Annotare con una freccia

annotate() disegna un'etichetta più una freccia opzionale che punta a un punto dati specifico. È lo strumento giusto quando vuoi evidenziare valori anomali o picchi.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [4, 7, 2, 9, 3]

plt.plot(x, y, marker='o')
plt.annotate(
    'Peak',
    xy=(4, 9),           # tip of the arrow (the data point)
    xytext=(3.2, 9.5),   # where the label sits
    arrowprops=dict(arrowstyle='->', color='black'),
    fontsize=12,
)
plt.title('Annotated Line Plot')
plt.show()

API orientata agli oggetti: usare i metodi di Axes

Tutte le funzioni precedenti sono scorciatoie convenienti attorno agli assi attivi correnti. Quando si lavora con più sottografici — o quando è necessario un controllo preciso — usa direttamente i metodi dell'oggetto Axes: ax.set_xlabel(), ax.set_ylabel(), ax.set_title(), ax.legend() e ax.set_xticks().

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

months = ['Jan', 'Feb', 'Mar', 'Apr']
revenue = [12000, 15000, 13000, 18000]
costs   = [8000,  9000, 10000, 11000]

ax.plot(months, revenue, marker='o', label='Revenue')
ax.plot(months, costs,   marker='s', label='Costs', linestyle='--')

ax.set_xlabel('Month', fontsize=12)
ax.set_ylabel('Amount ($)', fontsize=12)
ax.set_title('Revenue vs Costs — Q1', fontsize=14)
ax.legend(loc='upper left')

plt.tight_layout()
plt.show()

Preferisci lo stile orientato agli oggetti quando il tuo script crea più di un asse. Le scorciatoie plt.* si indirizzano verso qualsiasi asse attualmente attivo, il che può produrre bug difficili da rintracciare nelle figure con più sottografici.

Riferimento rapido

ObiettivoFunzione (pyplot)Metodo (Axes)
Etichetta asse Xplt.xlabel()ax.set_xlabel()
Etichetta asse Yplt.ylabel()ax.set_ylabel()
Titolo del graficoplt.title()ax.set_title()
Titolo della figuraplt.suptitle()fig.suptitle()
Legendaplt.legend()ax.legend()
Etichette tick Xplt.xticks()ax.set_xticks() / ax.set_xticklabels()
Etichette tick Yplt.yticks()ax.set_yticks() / ax.set_yticklabels()
Testo liberoplt.text()ax.text()
Annotazione + frecciaplt.annotate()ax.annotate()

Capitoli correlati

Was this page helpful?