0Pricing
Pandas & NumPy Academy · Lezione

Grafici categorici: boxplot, barplot, violinplot

Confronti le distribuzioni tra gruppi con box plot e violin plot e rappresenti le medie dei gruppi con barre d'errore usando barplot.

Grafici categorici: boxplot, barplot, violinplot è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 2 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.

Perché usare i grafici di confronto tra categorie?

Quando desidera confrontare una variabile numerica tra diverse categorie — per esempio, le mance ricevute nei diversi giorni della settimana o i prezzi dei prodotti in base alla marca — sono necessari grafici specializzati. Seaborn fornisce tre grafici essenziali per il confronto tra categorie: boxplot, barplot e violinplot. Ognuno mette in evidenza aspetti diversi della distribuzione ed è adatto a obiettivi analitici differenti.

import seaborn as sns
import matplotlib.pyplot as plt

# Load the tips dataset — a classic Seaborn example
tips = sns.load_dataset('tips')
print(tips.groupby('day')['total_bill'].describe())

Box plot con sns.boxplot

Un box plot riassume una distribuzione usando cinque statistiche: il minimo, il primo quartile (Q1), la mediana, il terzo quartile (Q3) e il massimo (escludendo i valori anomali). Il box si estende da Q1 a Q3, cioè nell'intervallo interquartile, IQR; la linea all'interno del box rappresenta la mediana e i baffi si estendono fino a 1,5×IQR. I punti oltre i baffi vengono rappresentati singolarmente come valori anomali. I box plot sono eccellenti per individuare a colpo d'occhio asimmetrie e valori anomali.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.boxplot(data=tips, x='day', y='total_bill', order=['Thur', 'Fri', 'Sat', 'Sun'])
plt.title('Total Bill Distribution by Day')
plt.xlabel('Day')
plt.ylabel('Total Bill ($)')
plt.show()

Aggiungere hue ai box plot

Il parametro hue suddivide ogni categoria in sottogruppi visualizzati affiancati con colori diversi. Per esempio, aggiungendo hue='smoker' a un box plot di bill per giorno, vengono visualizzati due box per ogni giorno: uno per i fumatori e uno per i non fumatori. In questo modo è possibile confrontare chiaramente tre variabili senza dover usare i facet. Usi una legenda per mantenere leggibile il grafico.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.boxplot(
    data=tips,
    x='day',
    y='total_bill',
    hue='smoker',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    palette='Set2'
)
plt.title('Bill by Day and Smoker Status')
plt.legend(title='Smoker')
plt.show()

Bar plot con sns.barplot

sns.barplot() mostra la media di una variabile numerica per ogni categoria, con barre di errore che rappresentano per impostazione predefinita un intervallo di confidenza del 95% (calcolato tramite bootstrap nelle versioni meno recenti di Seaborn o a partire dall'errore standard nelle versioni più recenti). A differenza degli istogrammi, i bar plot riassumono ogni gruppo con un solo valore: sono ideali quando interessano la media e la sua incertezza, non la forma completa della distribuzione.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Show mean tip per day with 95% CI
sns.barplot(
    data=tips,
    x='day',
    y='tip',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    palette='Blues_d',
    errorbar='ci'
)
plt.title('Average Tip by Day (with 95% CI)')
plt.ylabel('Average Tip ($)')
plt.show()

Violin plot con sns.violinplot

Un violin plot combina un box plot con una curva KDE specchiata su entrambi i lati. La larghezza del violino in corrispondenza di ciascun valore di y rappresenta la densità dei dati in quel punto: le sezioni più larghe contengono molte osservazioni, quelle più strette ne contengono poche. I violin plot forniscono più informazioni dei box plot perché mostrano se la distribuzione è unimodale o multimodale, ma per essere significativi richiedono una quantità maggiore di dati (idealmente n > 20 per gruppo).

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.violinplot(
    data=tips,
    x='day',
    y='total_bill',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    palette='pastel',
    inner='quartile'  # show quartile lines inside the violin
)
plt.title('Bill Distribution by Day — Violin Plot')
plt.show()

Parametro inner di violinplot

Il parametro inner di violinplot controlla ciò che viene disegnato all'interno della forma del violino. Le opzioni includono 'box' (un mini box plot), 'quartile' (linee orizzontali in corrispondenza di Q1, mediana e Q3), 'point' (i singoli punti dei dati) e 'stick' (tacche verticali per ogni osservazione). Impostando inner=None viene disegnato soltanto l'inviluppo della densità, senza indicatori interni, per un aspetto più pulito nei confronti affiancati.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

sns.violinplot(data=tips, x='smoker', y='tip',
               inner='box', ax=axes[0])
axes[0].set_title('inner="box"')

sns.violinplot(data=tips, x='smoker', y='tip',
               inner='point', ax=axes[1])
axes[1].set_title('inner="point"')

plt.tight_layout()
plt.show()

Combinare strip plot con box/violin plot

Aggiungere un sns.stripplot() sopra un box plot o un violin plot mostra ogni singolo punto dei dati come un punto, evitando di nascondere i valori anomali e le dimensioni ridotte dei campioni. Imposti jitter=True per distribuire orizzontalmente i punti, così che non si sovrappongano tutti, e imposti alpha per renderli semitrasparenti quando i punti sono numerosi.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

ax = sns.boxplot(data=tips, x='day', y='tip',
                 order=['Thur', 'Fri', 'Sat', 'Sun'],
                 palette='Set3', width=0.5)

# Overlay individual points
sns.stripplot(data=tips, x='day', y='tip',
              order=['Thur', 'Fri', 'Sat', 'Sun'],
              color='black', alpha=0.3, jitter=True, size=3, ax=ax)

plt.title('Tip Distribution with Raw Points')
plt.show()

Scegliere tra boxplot, barplot e violinplot

Usi un box plot quando ha bisogno di vedere mediane, IQR e valori anomali e le dimensioni dei campioni sono moderate. Usi un bar plot quando il pubblico è interessato alle medie e agli intervalli di confidenza, come accade spesso nei report e nelle dashboard. Usi un violin plot quando desidera mostrare la forma completa della distribuzione, soprattutto la multimodalità. Per dataset di piccole dimensioni (n < 30 per gruppo), preferisca box plot combinati con strip plot ai violin plot, perché con pochi punti le curve KDE diventano inaffidabili.

catplot: l'interfaccia a livello di figura

sns.catplot() è il wrapper a livello di figura per tutti i grafici categoriali. Passare kind='box', 'bar', 'violin', 'strip', 'swarm', 'count' o 'point' consente di cambiare il tipo di grafico. Il suo principale vantaggio sono i parametri col e row, che creano automaticamente una griglia di sottografici: per esempio, pannelli separati per genere o fascia oraria senza dover creare manualmente plt.subplots.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Faceted box plots: separate panel per time of day
sns.catplot(
    data=tips,
    x='day',
    y='total_bill',
    col='time',
    kind='box',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    height=5,
    aspect=0.8
)
plt.suptitle('Bill by Day, Faceted by Time', y=1.02)
plt.show()

Count plot per le tabelle di frequenza

sns.countplot() mostra quante osservazioni rientrano in ciascuna categoria, essenzialmente come un grafico a barre dei conteggi. Equivale a chiamare value_counts() e quindi a tracciare il risultato. Lo usi per visualizzare lo sbilanciamento tra classi nei dataset, la frequenza dei valori categoriali o la dimensione del campione per gruppo prima di effettuare qualsiasi confronto tra distribuzioni. Ordini le barre per frequenza con order=df['col'].value_counts().index.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Count by day, sorted by frequency
day_order = tips['day'].value_counts().index

sns.countplot(data=tips, x='day', order=day_order, palette='viridis')
plt.title('Number of Observations per Day')
plt.ylabel('Count')
plt.show()

Point plot per confrontare gli effetti

sns.pointplot() traccia la media di ogni categoria come un punto e collega i punti con una linea, rendendo facile osservare le tendenze tra categorie ordinate. Le barre di errore mostrano gli intervalli di confidenza. È particolarmente utile quando l'asse x rappresenta gruppi ordinati, come fasce d'età o livelli di istruzione, e si desidera enfatizzare la direzione e l'entità del cambiamento tra i gruppi, non soltanto le medie considerate singolarmente.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.pointplot(
    data=tips,
    x='day',
    y='tip',
    hue='smoker',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    dodge=True,
    capsize=0.1
)
plt.title('Mean Tip by Day and Smoker Status')
plt.show()

Verifica rapida

Verifichi la Sua comprensione dei grafici categoriali di Seaborn trattati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che sns.boxplot riassume le distribuzioni con mediana, IQR e valori anomali, sns.barplot mostra le medie dei gruppi con barre di errore per gli intervalli di confidenza e sns.violinplot rivela la forma completa della distribuzione, inclusa la multimodalità. Ora esploreremo gli scatter plot e i pair plot per visualizzare le relazioni tra variabili numeriche.

Domande Frequenti

La lezione «Grafici categorici: boxplot, barplot, violinplot» è gratuita?

Sì — il testo completo di «Grafici categorici: boxplot, barplot, violinplot» è 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 categorici: boxplot, barplot, violinplot»?

Confronti le distribuzioni tra gruppi con box plot e violin plot e rappresenti le medie dei gruppi con barre d'errore usando barplot. 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 2 di 4.

Quanto tempo richiede la lezione «Grafici categorici: boxplot, barplot, violinplot»?

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

  1. Grafici di distribuzione: histplot e kdeplot
  2. Grafici categorici: boxplot, barplot, violinplot
  3. Grafici a dispersione e pair plot
  4. Heatmap per matrici di correlazione
← Torna a Pandas & NumPy Academy