Matplotlib: creare grafici a barre impilate per confrontare categorie e composizioni

by theArchitect
SHARE
Matplotlib: creare grafici a barre impilate per confrontare categorie e composizioni
© Guida-HTML5.it

Introduzione

Quando si lavora con dati categoriali, spesso non basta mostrare un semplice grafico a barre. In molti casi è utile confrontare non solo il totale di ogni categoria, ma anche la sua composizione interna. Un esempio classico è la ripartizione delle vendite per trimestre e per canale, oppure il numero di ticket aperti per team e priorità.

In questi scenari, i grafici a barre impilate di Matplotlib sono una soluzione pratica e leggibile. Questo tipo di visualizzazione permette di rappresentare più serie di dati una sopra l’altra, mantenendo il confronto tra categorie e, allo stesso tempo, mostrando il contributo di ogni componente al totale.

In questo tutorial vedremo come costruire un grafico a barre impilate in Python con Matplotlib, come personalizzarlo in modo professionale e come evitare gli errori più comuni. L’obiettivo è darti una base solida per usare questo tipo di grafico in report, dashboard e analisi esplorative.

Codice completo

import matplotlib.pyplot as plt
import numpy as np

# Dati di esempio: vendite trimestrali per canale
trimestri = ["Q1", "Q2", "Q3", "Q4"]
online = np.array([120, 150, 180, 210])
negozio = np.array([90, 110, 100, 130])
partner = np.array([40, 55, 60, 70])

# Posizione delle barre sull´asse x
x = np.arange(len(trimestri))

# Creazione della figura
fig, ax = plt.subplots(figsize=(9, 5))

# Prima serie: base del grafico
ax.bar(x, online, label="Online", color="#4C78A8")

# Seconda serie: impilata sopra la prima
ax.bar(x, negozio, bottom=online, label="Negozio", color="#F58518")

# Terza serie: impilata sopra la somma delle prime due
bottom_partner = online + negozio
ax.bar(x, partner, bottom=bottom_partner, label="Partner", color="#54A24B")

# Etichette e titolo
ax.set_title("Vendite trimestrali per canale", fontsize=14, fontweight="bold")
ax.set_xlabel("Trimestre")
ax.set_ylabel("Numero di vendite")

# Etichette asse x
ax.set_xticks(x)
ax.set_xticklabels(trimestri)

# Griglia leggera sull´asse y
ax.grid(axis="y", linestyle="--", alpha=0.3)

# Legenda
ax.legend()

# Layout più pulito
plt.tight_layout()

# Mostra il grafico
plt.show()

Spiegazione

Il punto chiave dei grafici a barre impilate è il parametro bottom. In Matplotlib, questo parametro indica da quale altezza deve iniziare ogni barra. Se non lo specifichi, la barra parte da zero. Se invece vuoi impilare una serie sopra un’altra, devi passare come base la somma delle serie precedenti.

1. Preparazione dei dati

Nel codice abbiamo creato tre array NumPy:

  • online: vendite del canale online
  • negozio: vendite in negozio fisico
  • partner: vendite tramite partner

Ogni elemento corrisponde a un trimestre. La lunghezza di tutti gli array deve essere la stessa, altrimenti Matplotlib non riuscirà a costruire il grafico correttamente.

2. Posizionamento delle barre

La variabile x contiene le posizioni numeriche delle categorie sull’asse orizzontale. Usiamo np.arange(len(trimestri)) per ottenere una sequenza come [0, 1, 2, 3]. Poi sostituiamo le etichette numeriche con i nomi reali dei trimestri tramite set_xticklabels().

3. Impilamento delle serie

La prima chiamata a ax.bar() disegna le barre di base. La seconda usa bottom=online, quindi ogni barra parte dal valore già occupato da online. La terza serie usa bottom=online + negozio, cioè si appoggia sulla somma delle prime due componenti.

Questo approccio è molto utile quando vuoi mostrare sia il totale sia la sua suddivisione interna. Ad esempio:

  • fatturato per canale di vendita
  • numero di richieste per stato e priorità
  • consumi energetici per fascia oraria e tipologia

4. Personalizzazione visiva

Abbiamo assegnato colori diversi a ogni serie per migliorare la leggibilità. In un grafico impilato è fondamentale distinguere chiaramente le componenti, altrimenti il lettore fatica a interpretare i segmenti.

Abbiamo anche aggiunto una griglia orizzontale leggera con ax.grid(axis="y", linestyle="--", alpha=0.3). Questo aiuta a confrontare i valori totali delle categorie in modo più immediato.

Best practice

Per usare bene i grafici a barre impilate, conviene seguire alcune regole pratiche:

  • Usa questo grafico solo se il totale ha senso: l’impilamento funziona bene quando il valore complessivo è significativo oltre alle singole parti.
  • Limita il numero di serie: con troppe componenti il grafico diventa difficile da leggere. In generale, 3-5 serie sono spesso un buon compromesso.
  • Scegli colori coerenti: usa palette distinte ma armoniose. Evita colori troppo simili tra loro.
  • Ordina le categorie in modo logico: ad esempio per valore totale, per data o per priorità di business.
  • Aggiungi una legenda chiara: è essenziale per capire quale parte della barra rappresenta ogni serie.
  • Valuta le etichette dei valori: se il grafico è destinato a una presentazione, può essere utile mostrare i numeri direttamente sulle barre.

Un errore comune è usare il grafico a barre impilate per confrontare con precisione le singole componenti. In realtà, solo la base della barra è facile da confrontare. Le componenti superiori diventano più difficili da leggere perché non partono dallo zero. Se il tuo obiettivo principale è confrontare ogni serie tra categorie, spesso è meglio usare barre affiancate.

Se vuoi migliorare ulteriormente il grafico, puoi calcolare anche il totale per categoria e annotarlo sopra ogni barra. Questo rende la lettura più immediata, soprattutto quando il grafico contiene molte informazioni.

Riepilogo

I grafici a barre impilate sono uno strumento molto utile in Matplotlib per visualizzare contemporaneamente totale e composizione di dati categoriali. Con pochi passaggi puoi costruire una visualizzazione chiara, adatta a report tecnici e analisi di business.

Abbiamo visto come:

  • preparare dati in array NumPy
  • usare bottom per impilare le barre
  • personalizzare colori, etichette e griglia
  • applicare best practice per migliorare leggibilità e utilità del grafico

Se impari a usare bene questo tipo di visualizzazione, potrai rappresentare in modo efficace dati composti e rendere i tuoi report molto più chiari.

Approfondisci con risorse ufficiali

SHARE