Grafici a dispersione e pair plot
Crei grafici a dispersione colorati in base a una terza variabile con sns.scatterplot e visualizzi tutte le relazioni a coppie con sns.pairplot.
Grafici a dispersione e pair plot è 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.
Visualizzare le relazioni tra variabili
I grafici della distribuzione mostrano una variabile alla volta. Quando desidera comprendere la relazione tra due variabili numeriche, sono necessari scatter plot e visualizzazioni correlate. Questi strumenti aiutano a individuare la correlazione (le due variabili aumentano insieme?), i cluster (nei dati sono presenti sottogruppi?) e i valori anomali (ci sono punti insoliti lontani dalla nube principale?). Seaborn semplifica tutte queste operazioni con scatterplot e pairplot.
import seaborn as sns
import matplotlib.pyplot as plt
# Load the classic iris dataset
iris = sns.load_dataset('iris')
print(iris.head())
print('\nShape:', iris.shape)Scatter plot di base con sns.scatterplot
sns.scatterplot(data, x, y) traccia ogni osservazione come un punto alle coordinate (x, y). A differenza di plt.scatter di Matplotlib, la versione di Seaborn si collega automaticamente a un DataFrame e si integra con le semantiche hue, size e style. Il risultato è un grafico informativo con più variabili, ottenuto con una sola chiamata di funzione e una legenda automatica.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
sns.scatterplot(data=tips, x='total_bill', y='tip')
plt.title('Tip vs Total Bill')
plt.xlabel('Total Bill ($)')
plt.ylabel('Tip ($)')
plt.show()Codificare una terza variabile con hue
Il parametro hue assegna un colore a ogni punto in base a una terza variabile, categorica o numerica. Quando hue è una colonna categorica, come 'smoker', Seaborn usa colori distinti. Quando hue è una colonna numerica, usa una mappa di colori sequenziale. In questo modo è possibile visualizzare contemporaneamente tre variabili in un grafico 2D senza aggiungere un terzo asse.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
sns.scatterplot(
data=tips,
x='total_bill',
y='tip',
hue='time', # Lunch vs Dinner
style='smoker', # marker shape
palette='deep'
)
plt.title('Tip vs Bill by Time and Smoker Status')
plt.legend(bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()Codificare dimensione e stile
Oltre a hue, gli scatter plot di Seaborn supportano size (l'area del punto codifica una variabile numerica) e style (la forma del marcatore codifica una variabile categorica). Usare contemporaneamente tutte e tre le semantiche può rivelare schemi complessi con più variabili, ma rischia di sovraccaricare chi osserva il grafico. Una linea guida pratica consiste nell'usare prima hue (il più rilevante), poi style e infine size solo quando necessario.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
sns.scatterplot(
data=tips,
x='total_bill',
y='tip',
hue='day',
size='size', # party size controls marker area
sizes=(20, 200), # min and max dot area
alpha=0.7
)
plt.title('Tip vs Bill — Colour=Day, Size=Party Size')
plt.legend(bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()Aggiungere una retta di regressione con regplot
sns.regplot() traccia uno scatter plot e vi sovrappone una retta di regressione lineare con una banda di confidenza del 95% ombreggiata. È utile per visualizzare l'intensità e la direzione della relazione lineare tra due variabili. La banda di confidenza si restringe nelle aree con molti dati e si allarga ai margini, dove sono disponibili meno punti per determinare l'adattamento.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
sns.regplot(
data=tips,
x='total_bill',
y='tip',
scatter_kws={'alpha': 0.4},
line_kws={'color': 'red'}
)
plt.title('Tip vs Bill with Regression Line')
plt.show()lmplot: grafici di regressione con facet
sns.lmplot() è la versione a livello di figura di regplot. Supporta hue (rette di regressione separate per ogni gruppo nello stesso pannello) e col/row (pannelli separati). È uno strumento potente per verificare se la relazione tra due variabili cambia tra sottogruppi, per esempio se la relazione tra conto e mancia è più ripida a cena che a pranzo.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Separate regression line per time (Lunch / Dinner)
sns.lmplot(
data=tips,
x='total_bill',
y='tip',
hue='time',
scatter_kws={'alpha': 0.4},
height=5
)
plt.suptitle('Regression by Meal Time', y=1.02)
plt.show()Introduzione ai pair plot
sns.pairplot(df) crea una griglia di scatter plot per ogni coppia di colonne numeriche del DataFrame, con grafici della distribuzione sulla diagonale. È il modo più rapido per visualizzare in un'unica chiamata tutte le relazioni a coppie presenti in un dataset. Per un DataFrame con n colonne numeriche, pairplot crea una griglia n×n. È più pratico quando n è compreso tra 3 e 8; con griglie più grandi i grafici diventano troppo piccoli per essere letti.
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset('iris')
# Create pairplot coloured by species
sns.pairplot(iris, hue='species', diag_kind='kde', plot_kws={'alpha': 0.5})
plt.suptitle('Iris Dataset Pairplot', y=1.02)
plt.show()Personalizzare la diagonale di pairplot
Il parametro diag_kind controlla cosa viene visualizzato sulla diagonale della griglia di pairplot. Usi 'hist' per gli istogrammi o 'kde' per le stime della densità tramite kernel. La diagonale mostra la distribuzione univariata di ogni variabile, mentre i pannelli fuori dalla diagonale mostrano gli scatter plot a coppie. Può anche usare corner=True per visualizzare soltanto il triangolo inferiore, dimezzando il numero di pannelli e riducendo la ridondanza.
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset('iris')
# Show only lower triangle
sns.pairplot(
iris,
hue='species',
diag_kind='hist',
corner=True
)
plt.show()PairGrid per una personalizzazione completa
sns.PairGrid offre il pieno controllo sul tipo di grafico visualizzato in ogni sezione della matrice. Usi g.map_upper(), g.map_lower() e g.map_diag() per assegnare funzioni diverse, come regplot nel triangolo superiore e kdeplot in quello inferiore. In questo modo si ottengono grafici di qualità editoriale, in cui ogni pannello comunica informazioni specifiche sulla coppia di variabili.
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset('iris')
numeric_iris = iris.drop(columns=['species'])
g = sns.PairGrid(numeric_iris)
g.map_upper(sns.scatterplot, alpha=0.3)
g.map_lower(sns.kdeplot, fill=True)
g.map_diag(sns.histplot, kde=True)
plt.suptitle('Custom PairGrid', y=1.02)
plt.show()Individuare la correlazione negli scatter plot
Quando legge un grafico a dispersione, stimi la direzione (la nuvola sale o scende?), la forza (quanto sono raggruppati i punti attorno alla tendenza?) e la forma (lineare o curva?) della relazione. Il coefficiente di correlazione r varia da -1 (negativa perfetta) a +1 (positiva perfetta), mentre 0 indica l'assenza di una relazione lineare. Ricordi: correlazione non significa causalità e una relazione non lineare può avere r ≈ 0.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x = np.linspace(0, 10, 100)
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
# Strong positive correlation
axes[0].scatter(x, x + np.random.normal(0, 0.5, 100))
axes[0].set_title('Strong Positive (r≈0.99)')
# Weak correlation
axes[1].scatter(x, np.random.normal(5, 3, 100))
axes[1].set_title('No Correlation (r≈0)')
# Non-linear (quadratic) — r can be low
axes[2].scatter(x, (x-5)**2 + np.random.normal(0, 1, 100))
axes[2].set_title('Non-linear (r low despite pattern)')
plt.tight_layout()
plt.show()jointplot per dati bivariati con marginali
sns.jointplot() combina un grafico bivariato centrale con grafici univariati marginali sui bordi superiore e destro. Passi kind='scatter', 'hex', 'kde' oppure 'reg'. Il tipo hex è utile quando sono presenti migliaia di punti sovrapposti: li raggruppa in esagoni e usa il colore per mostrare la densità, risolvendo il problema della sovrapposizione che rende illeggibili i grafici a dispersione per dataset di grandi dimensioni.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# KDE joint plot with marginal distributions
sns.jointplot(
data=tips,
x='total_bill',
y='tip',
kind='reg',
marginal_kws={'bins': 20}
)
plt.suptitle('Joint Distribution of Bill and Tip', y=1.02)
plt.show()Verifica rapida
Verifichi la Sua comprensione dei grafici a dispersione e dei pair plot di Seaborn illustrati in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che sns.scatterplot codifica fino a quattro variabili usando x, y, hue, size e style, sns.regplot/lmplot sovrappone una retta di regressione per quantificare le relazioni lineari e sns.pairplot genera una griglia con tutte le coppie, ideale per l'analisi esplorativa di dataset multivariati. Ora esamineremo le mappe di calore per visualizzare le matrici di correlazione.
Domande Frequenti
La lezione «Grafici a dispersione e pair plot» è gratuita?
Sì — il testo completo di «Grafici a dispersione e pair plot» è 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 dispersione e pair plot»?
Crei grafici a dispersione colorati in base a una terza variabile con sns.scatterplot e visualizzi tutte le relazioni a coppie con sns.pairplot. 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 dispersione e pair plot»?
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