Introduzione
Quando si lavora con dati numerici, una delle domande più frequenti è: come sono distribuiti i valori? In altre parole, vogliamo capire se i dati sono concentrati in un intervallo preciso, se presentano valori anomali, se sono simmetrici oppure sbilanciati verso destra o sinistra. Per rispondere a queste domande, uno strumento molto utile in Matplotlib è l´istogramma.
A differenza di un grafico a linee o di uno scatter plot, l’istogramma non mostra l’evoluzione di una grandezza nel tempo, ma raggruppa i valori in intervalli chiamati bin e mostra quante osservazioni cadono in ciascun intervallo. È un tipo di visualizzazione fondamentale in analisi esplorativa dei dati, data science, controllo qualità e monitoraggio di metriche applicative.
In questo tutorial vedremo come creare istogrammi con Matplotlib, come personalizzarli in modo efficace e come usarli per confrontare più distribuzioni. L’obiettivo è fornirti una base pratica, utile e subito applicabile in progetti reali.
Codice completo
import matplotlib.pyplot as plt
import numpy as np
# Dati di esempio: tempi di risposta di un servizio web in millisecondi
np.random.seed(42)
tempi_api = np.random.normal(loc=120, scale=15, size=500)
tempi_db = np.random.normal(loc=95, scale=20, size=500)
# Creiamo la figura
plt.figure(figsize=(10, 6))
# Istogramma del primo dataset
plt.hist(
tempi_api,
bins=20,
alpha=0.7,
color="steelblue",
edgecolor="black",
label="API"
)
# Istogramma del secondo dataset
plt.hist(
tempi_db,
bins=20,
alpha=0.7,
color="orange",
edgecolor="black",
label="Database"
)
# Titolo e etichette
plt.title("Distribuzione dei tempi di risposta")
plt.xlabel("Tempo di risposta (ms)")
plt.ylabel("Numero di richieste")
# Griglia e legenda
plt.grid(axis="y", linestyle="--", alpha=0.4)
plt.legend()
# Layout più pulito
plt.tight_layout()
# Mostra il grafico
plt.show() Spiegazione
Vediamo il codice passo per passo per capire non solo cosa fa, ma anche perché è scritto così.
1. Import delle librerie
Usiamo due librerie:
- matplotlib.pyplot, che fornisce l’interfaccia più comune per creare grafici;
- numpy, utile per generare dati numerici realistici e per simulare dataset.
2. Creazione dei dati
Nel tutorial usiamo dati simulati con una distribuzione normale. Questo è molto utile per testare il grafico senza dipendere da file esterni. I due array rappresentano tempi di risposta di due componenti diverse di un sistema:
- tempi_api: tempi medi più alti, con variabilità moderata;
- tempi_db: tempi medi più bassi, ma con una dispersione leggermente maggiore.
La funzione np.random.normal() genera numeri casuali attorno a una media (loc) con una certa deviazione standard (scale). Il parametro size definisce quanti valori creare.
3. Creazione dell’istogramma
La funzione plt.hist() è il cuore del tutorial. I parametri più importanti sono:
- bins: numero di intervalli in cui suddividere i dati. Più bin significano più dettaglio, ma anche più rumore visivo;
- alpha: trasparenza, utile quando sovrapponi più istogrammi;
- color: colore delle barre;
- edgecolor: colore del bordo delle barre, utile per migliorare la leggibilità;
- label: testo che comparirà nella legenda.
Nel nostro esempio disegniamo due istogrammi nello stesso grafico. La trasparenza con alpha=0.7 è importante perché permette di vedere entrambe le distribuzioni anche se si sovrappongono.
4. Titoli, etichette e legenda
Un grafico utile non deve essere solo bello, ma soprattutto leggibile. Per questo aggiungiamo:
- plt.title() per descrivere il contenuto del grafico;
- plt.xlabel() per chiarire l’asse orizzontale;
- plt.ylabel() per indicare quante osservazioni ci sono in ogni bin;
- plt.legend() per distinguere i due dataset.
5. Griglia e layout
La griglia orizzontale aiuta a confrontare rapidamente le altezze delle barre. Il parametro axis="y" limita la griglia all’asse verticale, evitando un effetto visivo troppo invasivo.
Infine, plt.tight_layout() ottimizza automaticamente gli spazi interni della figura, evitando che titolo ed etichette si sovrappongano o escano dall’area visibile.
Best practice
Quando usi istogrammi in Matplotlib, alcune scelte migliorano molto la qualità del risultato finale.
- Scegli il numero di bin con attenzione: pochi bin nascondono dettagli importanti, troppi bin rendono il grafico rumoroso. Inizia con valori tra 10 e 30 e valuta il contesto.
- Usa sempre etichette chiare: un istogramma senza asse e titolo è difficile da interpretare, soprattutto in report e dashboard.
- Preferisci colori coerenti e leggibili: usa palette semplici e non troppo sature. Se confronti più distribuzioni, mantieni un contrasto chiaro.
- Rendi visibili i bordi delle barre: con edgecolor="black" o simili, i bin risultano più leggibili, specialmente quando i colori sono simili.
- Usa la trasparenza quando sovrapponi dataset: senza alpha, un istogramma può coprire completamente l’altro.
- Valuta la normalizzazione: se confronti dataset di dimensioni diverse, può essere utile usare density=True per visualizzare la densità invece dei conteggi assoluti.
Un’altra buona abitudine è verificare sempre il significato statistico del grafico. L’istogramma è eccellente per esplorare i dati, ma può essere influenzato da scelte arbitrarie come il numero di bin. Per analisi più approfondite, può essere utile affiancarlo a boxplot, KDE o statistiche descrittive.
Riepilogo
L’istogramma è uno degli strumenti più pratici e versatili di Matplotlib per analizzare la distribuzione di dati numerici. In questo tutorial hai visto come:
- creare un istogramma con plt.hist();
- personalizzare bin, colori, trasparenza e bordi;
- confrontare più distribuzioni nello stesso grafico;
- migliorare la leggibilità con titolo, etichette, legenda e griglia.
Se lavori con dati reali, l’istogramma può aiutarti a individuare anomalie, capire la forma della distribuzione e prendere decisioni migliori sull’analisi successiva. È uno di quei grafici che sembra semplice, ma diventa estremamente potente quando lo usi con criterio.
Approfondisci con risorse ufficiali
Per continuare lo studio in modo solido, ti consiglio di consultare la documentazione ufficiale di Matplotlib. Le risorse più utili per questo argomento sono:
- Matplotlib Pyplot API: documentazione generale delle funzioni di plotting;
- plt.hist(): riferimento ufficiale per istogrammi e parametri disponibili;
- Gallery ufficiale di Matplotlib: esempi pratici e casi d’uso reali;
- Sezione su histogram e density plots: utile per capire differenze tra conteggi e densità.
Studiare la documentazione ufficiale ti aiuta a conoscere opzioni avanzate, comportamenti precisi dei parametri e best practice aggiornate. È il modo migliore per passare da un uso base di Matplotlib a una visualizzazione dati più professionale.
