Grafici di distribuzione: histplot e kdeplot
Visualizzi la forma di una distribuzione numerica con sns.histplot e vi sovrapponga una stima della densità del kernel con sns.kdeplot.
Grafici di distribuzione: histplot e kdeplot è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 1 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.
Seaborn e i grafici delle distribuzioni
Seaborn è una libreria per la visualizzazione dei dati statistici costruita sopra Matplotlib. Offre un'API di alto livello che consente di creare grafici belli e informativi con una quantità minima di codice. Una delle prime cose da capire di qualsiasi dataset è la forma delle sue distribuzioni e gli strumenti principali di Seaborn per questo scopo sono histplot e kdeplot.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# Load a built-in dataset
tips = sns.load_dataset('tips')
print(tips.head())Creare un istogramma di base con histplot
sns.histplot(data, x='column') crea un istogramma di una variabile numerica. Per impostazione predefinita, Seaborn sceglie automaticamente un numero ragionevole di intervalli usando la regola di Sturges. Potete personalizzare il numero di intervalli con il parametro bins oppure lasciare che Seaborn lo scelga automaticamente. L'altezza di ogni barra rappresenta il conteggio delle osservazioni in quell'intervallo.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Basic histogram of total bill amounts
sns.histplot(data=tips, x='total_bill')
plt.title('Distribution of Total Bill')
plt.xlabel('Total Bill ($)')
plt.show()Controllare gli intervalli e il parametro stat
Il parametro bins controlla il numero di barre visualizzate dall'istogramma: un numero maggiore rivela dettagli più fini, ma può produrre un aspetto rumoroso. Il parametro stat modifica ciò che rappresenta l'asse y: 'count' (predefinito), 'density' (densità di probabilità), 'probability' (frazione delle osservazioni) oppure 'percent'. La scelta di stat='density' rende confrontabili istogrammi ottenuti da dataset di dimensioni diverse.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
# Count histogram with 20 bins
sns.histplot(data=tips, x='total_bill', bins=20, ax=axes[0])
axes[0].set_title('Count (20 bins)')
# Density histogram
sns.histplot(data=tips, x='total_bill', stat='density', ax=axes[1])
axes[1].set_title('Density')
plt.tight_layout()
plt.show()Sovrapporre una KDE all'istogramma
Impostando kde=True in histplot si sovrappone all'istogramma una curva di stima della densità con kernel (KDE). La KDE è un'approssimazione continua e uniforme della distribuzione di probabilità sottostante. Questa combinazione è molto efficace: l'istogramma mostra i conteggi grezzi per intervallo, mentre la KDE evidenzia la forma generale e rileva la presenza di più picchi (multimodalità).
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Histogram with KDE overlay
sns.histplot(data=tips, x='total_bill', kde=True, bins=25, color='steelblue')
plt.title('Bill Distribution with KDE Overlay')
plt.xlabel('Total Bill ($)')
plt.show()Usare kdeplot in modo indipendente
sns.kdeplot() traccia solo la curva uniforme della densità, senza le barre dell'istogramma. È utile per confrontare più distribuzioni sugli stessi assi, perché gli istogrammi sovrapposti diventano confusi, mentre le curve KDE sovrapposte restano leggibili. Il parametro fill=True ombreggia l'area sotto la curva, facilitando la distinzione visiva tra i gruppi.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# KDE plot for lunch vs dinner bills
sns.kdeplot(data=tips, x='total_bill', hue='time', fill=True, alpha=0.5)
plt.title('Bill Distribution: Lunch vs Dinner')
plt.xlabel('Total Bill ($)')
plt.show()Il parametro hue per confrontare i gruppi
Sia histplot sia kdeplot accettano un parametro hue che suddivide i dati in base a una colonna categorica e disegna ogni gruppo con un colore diverso. Questo facilita il confronto tra le distribuzioni dei gruppi. Quando usate histplot con hue, impostate stat='density' per rendere correttamente confrontabili gruppi di dimensioni diverse.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Compare tip distributions by smoker status
sns.histplot(
data=tips,
x='tip',
hue='smoker',
stat='density',
common_norm=False,
bins=20,
alpha=0.6
)
plt.title('Tip Distribution by Smoker Status')
plt.show()La bandwidth nella KDE: il parametro bw_adjust
La KDE ha un parametro di regolazione chiamato bandwidth, che controlla quanto è uniforme la curva. Una bandwidth ridotta rende la curva frastagliata e porta a un overfitting sui dati; una bandwidth elevata produce un'eccessiva uniformità e nasconde caratteristiche reali. Seaborn usa bw_adjust (predefinito 1.0) come moltiplicatore della bandwidth scelta automaticamente: valori inferiori a 1 aumentano la ruvidità, mentre valori superiori a 1 aumentano la uniformità.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
bw_values = [0.3, 1.0, 3.0]
for ax, bw in zip(axes, bw_values):
sns.kdeplot(data=tips, x='total_bill', bw_adjust=bw, ax=ax)
ax.set_title(f'bw_adjust={bw}')
plt.tight_layout()
plt.show()Distribuzioni 2D con histplot e kdeplot
Sia histplot sia kdeplot supportano grafici bidimensionali passando entrambi i parametri x e y. Un istogramma 2D mostra una griglia delle frequenze codificata tramite colori; una KDE 2D mostra linee di contorno a densità costante. Questi grafici rivelano la distribuzione congiunta di due variabili numeriche e indicano se sono correlate.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# 2D histogram
sns.histplot(data=tips, x='total_bill', y='tip', ax=axes[0])
axes[0].set_title('2D Histogram')
# 2D KDE contour plot
sns.kdeplot(data=tips, x='total_bill', y='tip', fill=True, ax=axes[1])
axes[1].set_title('2D KDE Contours')
plt.tight_layout()
plt.show()Personalizzare l'aspetto con i temi di Seaborn
Seaborn offre temi integrati tramite sns.set_theme(style=). Gli stili disponibili sono 'darkgrid', 'whitegrid', 'dark', 'white' e 'ticks'. Potete anche impostare una palette con palette= o sns.set_palette(). Queste impostazioni si applicano globalmente a tutti i grafici successivi nella sessione, facilitando la creazione di un aspetto coerente.
import seaborn as sns
import matplotlib.pyplot as plt
# Apply a clean whitegrid theme
sns.set_theme(style='whitegrid', palette='muted')
tips = sns.load_dataset('tips')
sns.histplot(data=tips, x='total_bill', kde=True, bins=20)
plt.title('Styled Distribution Plot')
plt.show()
# Reset to defaults when done
sns.reset_defaults()Interpretare la forma di una distribuzione
Quando si legge un grafico della distribuzione, bisogna cercare quattro caratteristiche fondamentali. Centro: dove si concentra la maggior parte dei dati (media/mediana)? Dispersione: quanto è ampia la distribuzione (deviazione standard)? Asimmetria: la coda è più lunga a destra (asimmetria positiva) o a sinistra (asimmetria negativa)? Modalità: la distribuzione ha un solo picco (unimodale) o più picchi (bimodale/multimodale)? Le distribuzioni bimodali spesso indicano la presenza di due sottopopolazioni nascoste che vale la pena separare.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# Simulate a bimodal distribution
np.random.seed(42)
data = np.concatenate([
np.random.normal(loc=20, scale=3, size=300),
np.random.normal(loc=45, scale=5, size=200)
])
sns.histplot(data, kde=True, bins=40)
plt.title('Bimodal Distribution — Two Hidden Groups')
plt.xlabel('Value')
plt.show()displot: funzione di distribuzione a livello di figura
sns.displot() è il wrapper a livello di figura che crea una propria Figure e supporta la suddivisione in facet su righe e colonne tramite i parametri col= e row=. Passare kind='hist', kind='kde' o kind='ecdf' consente di cambiare il tipo di grafico. L'ECDF (funzione di distribuzione cumulativa empirica) è particolarmente utile perché mostra quale frazione dei dati si trova al di sotto di ciascun valore, senza richiedere la scelta degli intervalli.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Faceted KDE by day of week
sns.displot(
data=tips,
x='total_bill',
col='day',
col_wrap=2,
kind='kde',
fill=True
)
plt.suptitle('Bill Distributions by Day', y=1.02)
plt.show()Verifica rapida
Verifichi la Sua comprensione dei grafici di distribuzione di Seaborn trattati in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che sns.histplot crea istogrammi con intervalli e parametri statistici personalizzabili, sns.kdeplot traccia curve di densità uniformi, ideali per confrontare gruppi, e il parametro hue suddivide entrambi i tipi di grafico in base a una variabile categorica per consentire un confronto affiancato. Ora esploreremo i grafici per il confronto tra categorie, come box plot, bar plot e violin plot.
Impara Python con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «Grafici di distribuzione: histplot e kdeplot» è gratuita?
Sì — il testo completo di «Grafici di distribuzione: histplot e kdeplot» è 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 di distribuzione: histplot e kdeplot»?
Visualizzi la forma di una distribuzione numerica con sns.histplot e vi sovrapponga una stima della densità del kernel con sns.kdeplot. 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 1 di 4.
Quanto tempo richiede la lezione «Grafici di distribuzione: histplot e kdeplot»?
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
- Grafici di distribuzione: histplot e kdeplot
- Grafici categorici: boxplot, barplot, violinplot
- Grafici a dispersione e pair plot
- Heatmap per matrici di correlazione