Grafici a barre e istogrammi
Visualizzi i conteggi delle categorie con ax.bar() e la distribuzione dei dati con ax.hist(), regolando il numero di bin e il colore dei bordi.
Grafici a barre e istogrammi è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Grafici a barre e istogrammi
I grafici a barre mostrano dati categorici: una barra per ogni categoria, con altezza proporzionale a un valore. Rispondono alla domanda «quanto vale ogni categoria?». Gli istogrammi mostrano la distribuzione di una variabile numerica continua: i dati vengono suddivisi in intervalli e l'altezza della barra indica il conteggio o la frequenza in ciascun intervallo. Rispondono alla domanda «come sono distribuiti questi valori?». Per crearli si usano rispettivamente ax.bar() e ax.hist().
ax.bar() per i grafici a barre verticali
ax.bar(x, height) traccia un grafico a barre verticali in cui x è una sequenza di posizioni (o etichette) delle categorie e height è il valore della barra. Parametri principali: width (predefinito 0.8, controlla la larghezza della barra rispetto allo spazio tra le barre), color, edgecolor e align ('center' o 'edge'). Restituisce un elenco di oggetti Artist Rectangle.
import matplotlib.pyplot as plt
import numpy as np
categories = ['East', 'West', 'North', 'South']
values = [420, 380, 310, 290]
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)
ax.set_title('Regional Revenue')
ax.set_xlabel('Region')
ax.set_ylabel('Revenue (USD)')
# plt.show()
plt.close()Personalizzare l'aspetto delle barre
Alcune personalizzazioni rendono i grafici a barre molto più leggibili: si usi un unico colore di accento per tutte le barre (oppure un array di colori per distinguerle), si aggiungano le etichette dei valori sopra ogni barra con ax.bar_label(), si regoli la larghezza delle barre per lasciare spazio sufficiente e si imposti ax.set_ylim(0, max * 1.15) per lasciare spazio alle etichette sopra la barra più alta.
fig, ax = plt.subplots(figsize=(7, 4))
bars = ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)
# Add value labels above bars
ax.bar_label(bars, fmt='%d', padding=3, fontsize=10)
# Give space above bars for labels
ax.set_ylim(0, max(values) * 1.15)
ax.set_title('Regional Revenue')
plt.tight_layout()
plt.close()Grafici a barre orizzontali con ax.barh()
Si usa ax.barh(y, width) per creare grafici a barre orizzontali. Le barre orizzontali sono preferibili quando le etichette delle categorie sono lunghe (si leggono naturalmente da sinistra a destra) o quando le categorie sono numerose (si dispongono in modo più compatto). Si applicano tutti gli stessi parametri di personalizzazione: height controlla lo spessore della barra e ax.barh_label() (o ax.bar_label()) aggiunge le etichette testuali.
import pandas as pd
df = pd.DataFrame({'region': categories, 'revenue': values})
df_sorted = df.sort_values('revenue')
fig, ax = plt.subplots(figsize=(7, 4))
ax.barh(df_sorted['region'], df_sorted['revenue'],
color='steelblue', edgecolor='white', height=0.5)
ax.set_title('Revenue by Region (Sorted)')
ax.set_xlabel('Revenue (USD)')
plt.tight_layout()
plt.close()Grafici a barre raggruppate
Per confrontare più gruppi affiancati, si crea un grafico a barre raggruppate spostando manualmente le posizioni delle barre. Si calcolano le posizioni centrali di ogni gruppo, quindi si sottrae o si aggiunge un offset fisso per ogni sottogruppo. La larghezza totale delle barre più lo spazio tra i gruppi deve essere pari a 1.0, per evitare che le barre si sovrappongano. L'impostazione di ax.set_xticks() centra le etichette dei tick tra le barre raggruppate.
products = ['A', 'B', 'C']
q1 = [80, 120, 95]
q2 = [90, 110, 105]
x = np.arange(len(products))
width = 0.35
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(x - width/2, q1, width, label='Q1', color='steelblue')
ax.bar(x + width/2, q2, width, label='Q2', color='coral')
ax.set_xticks(x)
ax.set_xticklabels(products)
ax.legend()
ax.set_title('Q1 vs Q2 Sales by Product')
plt.close()Grafici a barre impilate
Le barre impilate mostrano la composizione di un totale suddiviso in più sottogruppi. Le barre del secondo gruppo iniziano dal punto in cui terminano quelle del primo, usando il parametro bottom. Il valore bottom di ogni livello successivo è la somma cumulativa di tutti i livelli precedenti. Le barre impilate sono utili per mostrare contemporaneamente sia il totale sia il contributo di ogni componente.
q1_arr = np.array(q1)
q2_arr = np.array(q2)
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(products, q1_arr, label='Q1', color='steelblue')
ax.bar(products, q2_arr, bottom=q1_arr, label='Q2', color='coral')
ax.legend()
ax.set_title('Stacked Q1 + Q2 Sales by Product')
ax.set_ylabel('Total Sales')
plt.close()ax.hist() per gli istogrammi
ax.hist(data, bins) crea un istogramma. Il parametro bins controlla in quanti intervalli di uguale ampiezza vengono suddivisi i dati (il valore predefinito è 10). È anche possibile passare un elenco dei bordi degli intervalli per usare ampiezze diverse. Parametri principali: density=True normalizza l'istogramma in una densità di probabilità, edgecolor aggiunge i bordi tra le barre, mentre color e alpha ne controllano l'aspetto.
np.random.seed(42)
data = np.random.randn(500) # 500 samples from standard normal
fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(data, bins=30, color='steelblue', edgecolor='white', alpha=0.7)
ax.set_title('Distribution of Values')
ax.set_xlabel('Value')
ax.set_ylabel('Count')
plt.close()Scegliere il numero di intervalli
Il numero di intervalli influenza notevolmente l'aspetto di un istogramma. Troppi pochi intervalli nascondono la struttura dei dati; troppi intervalli creano picchi rumorosi. Euristiche comuni: regola di Sturges (≈ log2(n) + 1), regola di Scott o regola di Freedman-Diaconis. Matplotlib supporta queste opzioni come stringhe: bins='auto', bins='scott', bins='fd'. Per l'analisi esplorativa, provate manualmente alcuni valori; per le presentazioni, scegliete il numero di intervalli che comunica meglio la forma della distribuzione.
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
for ax, b in zip(axes, [5, 30, 'auto']):
ax.hist(data, bins=b, edgecolor='white', color='steelblue', alpha=0.7)
ax.set_title(f'bins={b}')
ax.set_xlabel('Value')
plt.tight_layout()
plt.close()Istogrammi sovrapposti per il confronto
Per confrontare due distribuzioni sugli stessi assi, chiamate ax.hist() due volte con dati e colori diversi. Usate alpha=0.5 per entrambe, così la sovrapposizione sarà visibile. Aggiungete le etichette e chiamate ax.legend(). L'uso di density=True normalizza entrambi gli istogrammi sulla stessa scala quando le dimensioni dei campioni differiscono, rendendo le forme direttamente confrontabili.
group_a = np.random.randn(300)
group_b = np.random.randn(300) + 1.5 # shifted right
fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(group_a, bins=25, alpha=0.5, color='steelblue', label='Group A', density=True)
ax.hist(group_b, bins=25, alpha=0.5, color='coral', label='Group B', density=True)
ax.legend()
ax.set_title('Distribution Comparison')
plt.close()Tracciare Series e DataFrame Pandas
Sia .plot.bar() sia .plot.hist() sono disponibili come metodi di DataFrame/Series e generano automaticamente figure Matplotlib. Accettano un parametro ax per disegnare su un oggetto Axes esistente. Questo è il modo più rapido per creare grafici a barre a partire da dati Pandas raggruppati: calcolate l'aggregazione con groupby, chiamate .plot.bar() sul risultato, quindi personalizzate l'oggetto Axes restituito.
import pandas as pd
import numpy as np
df_sales = pd.DataFrame({
'region': ['East', 'West', 'North', 'South'],
'revenue': [420, 380, 310, 290]
}).set_index('region')
fig, ax = plt.subplots(figsize=(7, 4))
df_sales['revenue'].plot.bar(ax=ax, color='steelblue', rot=0)
ax.set_title('Revenue by Region')
plt.tight_layout()
plt.close()Scegliere tra grafico a barre e istogramma
La scelta tra un grafico a barre e un istogramma dipende dal tipo di dati. Usate un grafico a barre quando l'asse x rappresenta categorie distinte e non ordinate (nomi di prodotti, regioni, segmenti di utenti), per le quali le barre rappresentano valori aggregati per ciascuna categoria. Usate un istogramma quando l'asse x rappresenta una variabile numerica continua e volete mostrare come i valori sono distribuiti in un intervallo. Confonderli è un errore comune di visualizzazione, che induce i lettori a interpretare erroneamente il tipo di dati.
# Bar chart: categorical x-axis (product names)
products = ['Widget', 'Gadget', 'Doohickey']
revenue = [500, 300, 200]
fig, ax = plt.subplots(figsize=(5, 3))
ax.bar(products, revenue, color='steelblue')
ax.set_title('Revenue per Product (Bar Chart)')
plt.close()
# Histogram: continuous x-axis (order sizes)
order_sizes = np.random.exponential(scale=50, size=300)
fig, ax = plt.subplots(figsize=(5, 3))
ax.hist(order_sizes, bins=20, color='coral', edgecolor='white')
ax.set_title('Distribution of Order Sizes (Histogram)')
plt.close()Verifica rapida
Verificate la vostra comprensione dei grafici a barre e degli istogrammi presentati in questa lezione.
Riepilogo della lezione
In questa lezione avete imparato che ax.bar() crea grafici a barre verticali e ax.barh() crea grafici a barre orizzontali; bottom consente di creare barre impilate; ax.hist() crea istogrammi il cui numero di intervalli è controllato da bins; e density=True normalizza gli istogrammi per un confronto corretto. Ora aggiungeremo etichette degli assi, titoli e salveremo figure di qualità editoriale.
Domande Frequenti
La lezione «Grafici a barre e istogrammi» è gratuita?
Sì — il testo completo di «Grafici a barre e istogrammi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Cosa imparerò in «Grafici a barre e istogrammi»?
Visualizzi i conteggi delle categorie con ax.bar() e la distribuzione dei dati con ax.hist(), regolando il numero di bin e il colore dei bordi. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?
Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Grafici a barre e istogrammi»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?
Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Architettura di Figure e Axes
- Grafici a linee e a dispersione
- Grafici a barre e istogrammi
- Etichette, titoli e salvataggio delle figure