W3docs

Introduzione a Matplotlib

Scopri cos'è Matplotlib, come funziona e come creare i tuoi primi grafici in Python con esempi chiari su grafici a linee, etichette e sottotrame.

Matplotlib è la libreria di visualizzazione dati più diffusa in Python. Questo capitolo spiega cos'è Matplotlib, come funziona la sua architettura di base e come produrre i tuoi primi grafici — da un semplice grafico a linee a una figura con etichette e pannelli multipli. I capitoli successivi di questa sezione approfondiscono ogni tipo di grafico.

Cos'è Matplotlib?

Matplotlib è una libreria Python open-source per la creazione di visualizzazioni statiche, animate e interattive. John D. Hunter ne rilasciò la prima versione nel 2003, inizialmente per replicare i comandi di plotting di MATLAB all'interno di Python. Oggi è alla base di molti strumenti di visualizzazione di livello superiore (Seaborn, Pandas .plot(), SciPy) ed è lo standard de facto per figure di qualità editoriale in ambito scientifico e ingegneristico.

Perché usare Matplotlib?

  • Ampia varietà di grafici — linee, dispersione, barre, istogrammi, torta, box, violino, heatmap, contour, superfici 3D e molto altro.
  • Controllo granulare — ogni elemento di una figura (assi, tacche, font, colori, legende) è accessibile e configurabile.
  • Formati di output multipli — PNG, PDF, SVG, EPS e HTML interattivo (tramite il backend widget).
  • Integrazione nell'ecosistema — funziona direttamente con array NumPy, DataFrame Pandas e SciPy.
  • Gratuito e open-source — licenza BSD, comunità attiva, documentazione esaustiva.

Quando scegliere Matplotlib?

Usa Matplotlib quando hai bisogno di un controllo preciso e pronto per la pubblicazione su ogni elemento visivo, oppure quando stai sviluppando su un sistema che richiede una libreria stabile e ben supportata. Per grafici esplorativi veloci su DataFrame, il metodo .plot() integrato in Pandas (che chiama Matplotlib internamente) è spesso più rapido da scrivere. Per grafici statistici con un'API di livello superiore, Seaborn è un complemento popolare che consente comunque di tornare a Matplotlib per la messa a punto.

Come è strutturato Matplotlib

Comprendere l'architettura a due livelli di Matplotlib evita molta confusione in seguito.

Gli oggetti Figure e Axes

Ogni visualizzazione Matplotlib risiede all'interno di una Figure. Una Figure è il contenitore di livello superiore — pensala come la tela. All'interno di una Figure si posizionano uno o più oggetti Axes. Un Axes è l'area di plotting vera e propria che contiene l'asse x, l'asse y, le tacche, le linee della griglia e i dati.

Figure
└── Axes (one or more)
    ├── x-axis (XAxis)
    ├── y-axis (YAxis)
    ├── Title
    ├── Lines / Patches / Collections (the plotted data)
    └── Legend

Stile pyplot vs. stile orientato agli oggetti

Matplotlib espone due interfacce:

Stile pyplot — un insieme di funzioni in matplotlib.pyplot che gestiscono automaticamente la Figure e gli Axes correnti. Questo rispecchia il flusso di lavoro di MATLAB ed è comodo per script veloci e occasionali.

Stile orientato agli oggetti (OO) — si creano esplicitamente oggetti Figure e Axes e si chiamano i metodi su di essi. Questo approccio è preferito nel codice di produzione, nelle funzioni e in qualsiasi script che crei più di una figura, perché rende chiaro esattamente quale asse è il target di ogni comando.

Entrambi gli stili producono output identico. Gli esempi in questo capitolo utilizzano lo stile OO e segnalano dove la sintassi abbreviata di pyplot differisce.

Installare Matplotlib

Matplotlib non fa parte della libreria standard di Python. Installalo con pip:

pip install matplotlib

Se usi Anaconda o Miniconda, Matplotlib è incluso per impostazione predefinita. Per installarlo esplicitamente:

conda install matplotlib

Verifica l'installazione:

python -c "import matplotlib; print(matplotlib.__version__)"

Importare Matplotlib

La convenzione di importazione standard in tutta la comunità Python è:

Importazione standard di Matplotlib

import matplotlib.pyplot as plt

L'alias plt è universale — ogni tutorial, libro di testo e risposta su Stack Overflow lo usa, quindi attieniti ad esso.

Se hai bisogno anche di NumPy (comune per generare dati):

Importazione di Matplotlib e NumPy insieme

import numpy as np
import matplotlib.pyplot as plt

Il Tuo Primo Grafico

Lo script Matplotlib più semplice possibile: due liste di numeri, una chiamata a plot(), una chiamata a show().

Grafico a linee minimale

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]

fig, ax = plt.subplots()   # create Figure and Axes
ax.plot(x, y)              # draw a line through the points
plt.show()                 # open the display window (scripts only)

plt.subplots() restituisce una tupla (fig, ax). La maggior parte del codice in questa sezione usa questo schema perché rende esplicito su quale Axes si sta disegnando.

Nei notebook Jupyter plt.show() è facoltativo — i grafici vengono visualizzati inline automaticamente quando una cella termina l'esecuzione.

Negli script autonomi plt.show() apre una finestra e mette in pausa l'esecuzione finché la finestra non viene chiusa. Senza di esso, lo script termina prima che la finestra appaia.

Aggiungere Etichette e un Titolo

Le etichette degli assi e un titolo trasformano un grafico grezzo in una figura leggibile.

Grafico a linee con etichette e titolo

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('x')
ax.set_ylabel('x squared')
ax.set_title('Square Numbers')
plt.show()
MetodoCosa imposta
ax.set_xlabel('text')Etichetta sull'asse orizzontale
ax.set_ylabel('text')Etichetta sull'asse verticale
ax.set_title('text')Titolo sopra il grafico

Consulta il capitolo Matplotlib Labels per le opzioni di dimensione del font, peso e posizionamento.

Personalizzare lo Stile e il Colore della Linea

ax.plot() accetta argomenti keyword che controllano l'aspetto visivo della linea.

Linea rossa tratteggiata

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]

fig, ax = plt.subplots()
ax.plot(x, y, color='red', linestyle='--', linewidth=2)
ax.set_title('Dashed Red Line')
plt.show()

Valori comuni di linestyle: '-' (continua, predefinita), '--' (tratteggiata), ':' (punteggiata), '-.' (tratto-punto).

Colori nominali comuni: 'blue', 'red', 'green', 'orange', 'purple', 'black'. Funzionano anche i codici esadecimali come '#1f77b4'.

Consulta Matplotlib Line e Matplotlib Markers per un elenco completo delle opzioni di stile.

Tracciare Più Linee e Aggiungere una Legenda

Chiama ax.plot() più volte per sovrapporre più linee sullo stesso Axes. Passa label= a ogni chiamata, poi chiama ax.legend() per visualizzare il riquadro della legenda.

Due linee sovrapposte con una legenda

import numpy as np
import matplotlib.pyplot as plt

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

fig, ax = plt.subplots()
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)', linestyle='--')
ax.set_xlabel('Angle (radians)')
ax.set_ylabel('Value')
ax.set_title('Sine and Cosine')
ax.legend()
plt.show()

np.linspace(0, 2 * np.pi, 100) crea 100 numeri equidistanti da 0 a 2π — un modo comodo per produrre curve fluide.

Creare Sottotrame

plt.subplots(rows, cols) crea una griglia di Axes all'interno di una singola Figure. Si accede a ogni Axes tramite indice.

Griglia 2×2 di diversi tipi di grafici

import numpy as np
import matplotlib.pyplot as plt

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

fig, axs = plt.subplots(2, 2, figsize=(8, 6))

axs[0, 0].plot(x, y)
axs[0, 0].set_title('Line')

axs[0, 1].scatter(x[::5], y[::5])  # every 5th point
axs[0, 1].set_title('Scatter')

axs[1, 0].bar(['A', 'B', 'C'], [3, 7, 5])
axs[1, 0].set_title('Bar')

axs[1, 1].hist(np.random.randn(500), bins=20)
axs[1, 1].set_title('Histogram')

fig.tight_layout()   # prevent overlapping labels
plt.show()

fig.tight_layout() regola automaticamente la spaziatura tra le sottotrame in modo che titoli ed etichette non si sovrappongano. È quasi sempre una buona idea chiamarlo quando si usano le sottotrame.

Consulta Matplotlib Subplot per ulteriori informazioni sui layout a griglia, gli assi condivisi e GridSpec.

Salvare le Figure

Per salvare una figura su un file invece di visualizzarla in modo interattivo, chiama fig.savefig() prima di plt.show().

Salvare una figura come PNG e PDF

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Saved Figure')

fig.savefig('my_plot.png', dpi=150)   # raster: PNG at 150 DPI
fig.savefig('my_plot.pdf')            # vector: PDF (no DPI needed)
plt.show()

L'argomento dpi (dots per inch) controlla la risoluzione per i formati raster. dpi=150 è un buon equilibrio tra dimensione del file e qualità di stampa; dpi=300 è lo standard per le figure nelle riviste scientifiche.

I formati supportati includono PNG, PDF, SVG, EPS e TIFF. Matplotlib rileva il formato dall'estensione del file automaticamente.

Cosa c'è Dopo

Questo capitolo ha introdotto i concetti fondamentali di Matplotlib. Il resto della sezione Python Matplotlib approfondisce ogni argomento:

Was this page helpful?