Grafici a linee e a dispersione
Rappresenti dati continui con ax.plot() e punti discreti con ax.scatter(), controllando colore, marker e stile della linea.
Grafici a linee e a dispersione è 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.
Linee e dispersione: tipi di grafico fondamentali
I grafici a linee collegano i punti dati consecutivi con una linea e sono ideali per visualizzare le tendenze nel tempo o le funzioni continue. I grafici a dispersione disegnano singoli punti senza collegarli, perciò sono perfetti per esplorare le relazioni tra due variabili numeriche. Entrambi vengono creati su un oggetto Matplotlib Axes: ax.plot() per le linee e ax.scatter() per i punti del grafico a dispersione.
ax.plot() per i grafici a linee
ax.plot(x, y) traccia una linea che collega i punti dati nell'ordine in cui vengono forniti. Si passano i valori x come primo argomento e i valori y come secondo. Entrambi possono essere liste Python, array NumPy o Series Pandas. Quando si passa un solo argomento, Matplotlib usa automaticamente l'indice (0, 1, 2, ...) come asse x. Il metodo restituisce un elenco di oggetti Artist Line2D.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, y) # basic line plot
ax.set_title('Sine Wave')
ax.set_xlabel('x')
ax.set_ylabel('sin(x)')
# plt.show()
plt.close()Controllare lo stile e il colore delle linee
Gli argomenti con nome più comuni di ax.plot() sono: color (nome, valore esadecimale o tupla RGB), linewidth (o lw), linestyle (o ls): '-' continua, '--' tratteggiata, ':' puntinata, '-.' tratto-punto, marker (forma in corrispondenza di ogni punto dati) e markersize. È possibile combinare linestyle e marker per mostrare contemporaneamente la linea e i singoli punti dati.
fig, ax = plt.subplots(figsize=(7, 4))
# Solid blue line with circle markers
ax.plot(x, np.sin(x), color='steelblue', lw=2, ls='-',
marker='o', markersize=4, label='sin(x)')
# Dashed red line
ax.plot(x, np.cos(x), color='crimson', lw=1.5, ls='--', label='cos(x)')
ax.legend()
plt.close()Tracciare più linee
Si richiama ax.plot() più volte per sovrapporre diverse linee sullo stesso Axes. Matplotlib utilizza automaticamente una palette di colori predefinita a rotazione. Si passi sempre l'argomento con nome label per ogni linea, affinché ax.legend() possa etichettarle automaticamente. Si richiami la legenda dopo tutte le chiamate di tracciamento, così da includere tutte le linee.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
dates = pd.date_range('2024-01', periods=12, freq='ME')
fig, ax = plt.subplots(figsize=(8, 4))
for product in ['A', 'B', 'C']:
sales = np.random.randint(50, 200, 12)
ax.plot(dates, sales, marker='o', label=f'Product {product}')
ax.set_title('Monthly Sales by Product')
ax.legend()
plt.close()Tracciare direttamente i DataFrame Pandas
I DataFrame Pandas dispongono di un metodo .plot() che crea direttamente grafici Matplotlib. Si passi ax=ax per disegnare su un oggetto Axes esistente. df.plot(ax=ax) traccia tutte le colonne come linee separate, usando l'indice del DataFrame come asse x. In seguito è comunque possibile applicare tutte le personalizzazioni di Matplotlib sull'oggetto ax.
df = pd.DataFrame(
np.random.randn(12, 3),
index=pd.date_range('2024', periods=12, freq='ME'),
columns=['North', 'South', 'West']
).cumsum()
fig, ax = plt.subplots(figsize=(8, 4))
df.plot(ax=ax, linewidth=1.5)
ax.set_title('Cumulative Revenue by Region')
ax.set_ylabel('Revenue (cumulative)')
plt.close()ax.scatter() per i grafici a dispersione
ax.scatter(x, y) disegna singoli punti senza collegarli con linee. A differenza di ax.plot(), scatter non presuppone che i dati siano ordinati. Parametri principali: c (colore, può essere un array per colorare ogni punto singolarmente), s (dimensione del punto, può anch'esso essere un array), cmap (mappa colori da usare quando c è numerico) e alpha (trasparenza da 0 a 1 per gestire la sovrapposizione dei punti).
np.random.seed(42)
x = np.random.randn(100)
y = 2 * x + np.random.randn(100)
fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, color='steelblue', alpha=0.6, s=40)
ax.set_xlabel('Feature X')
ax.set_ylabel('Target Y')
ax.set_title('Feature vs Target')
plt.close()Colorare i punti di un grafico a dispersione per categoria
Si passa un array numerico al parametro c e una mappa colori cmap per colorare i punti del grafico a dispersione in base a una terza variabile. Si aggiunge una barra dei colori con plt.colorbar(scatter_obj) per fornire una scala di riferimento. Questa tecnica viene chiamata variante di un grafico a bolle quando anche il parametro s (dimensione) varia in base a una quarta variabile.
categories = np.random.choice([0, 1, 2], size=100)
fig, ax = plt.subplots(figsize=(6, 5))
scatter = ax.scatter(x, y, c=categories, cmap='Set1',
alpha=0.7, s=60, edgecolors='none')
fig.colorbar(scatter, ax=ax, label='Category')
ax.set_title('Scatter Coloured by Category')
plt.close()Aggiungere una linea di tendenza
Un grafico a dispersione con una linea di tendenza adattata comunica sia i singoli punti dati sia l'andamento generale. Si usa np.polyfit(x, y, 1) per calcolare un adattamento lineare, lo si valuta con np.poly1d(coeffs)(x_range) e si sovrappone il risultato con ax.plot() sopra il grafico a dispersione. La linea di tendenza dovrebbe essere più sottile e avere uno stile diverso, così da distinguerla dai punti dati.
fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, alpha=0.4, s=30, color='steelblue', label='Data')
# Fit and plot linear trend line
coeffs = np.polyfit(x, y, 1)
x_line = np.linspace(x.min(), x.max(), 100)
y_line = np.poly1d(coeffs)(x_line)
ax.plot(x_line, y_line, color='red', lw=2, label='Linear fit')
ax.legend()
ax.set_title('Scatter with Trend Line')
plt.close()Ombreggiare gli intervalli di confidenza con fill_between
ax.fill_between(x, y_lower, y_upper) riempie l'area tra due curve. Viene comunemente usato per mostrare intervalli di confidenza attorno a una linea della media, bande della deviazione standard o inviluppi min/max. Si passa alpha per rendere l'ombreggiatura semitrasparente, in modo che i dati sottostanti rimangano visibili.
x_range = np.linspace(0, 2 * np.pi, 100)
mean = np.sin(x_range)
upper = mean + 0.2
lower = mean - 0.2
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x_range, mean, color='steelblue', lw=2, label='Mean')
ax.fill_between(x_range, lower, upper,
color='steelblue', alpha=0.2, label='±0.2 band')
ax.legend()
ax.set_title('Line with Confidence Band')
plt.close()Limiti degli assi e linee della griglia
Si controlla l'intervallo visibile con ax.set_xlim(min, max) e ax.set_ylim(min, max). Si attivano le linee della griglia con ax.grid(True). È possibile personalizzare la griglia con gli argomenti con nome linestyle, linewidth e alpha. Una griglia discreta con alpha=0.3 facilita la lettura dei valori esatti senza appesantire il grafico. Si richiama ax.set_axisbelow(True) per disegnare la griglia dietro i punti dati.
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, np.sin(x), 'b-', lw=2)
ax.set_xlim(0, 2 * np.pi)
ax.set_ylim(-1.2, 1.2)
ax.grid(True, linestyle='--', alpha=0.5)
ax.set_axisbelow(True) # grid behind data
ax.set_title('Sine with Grid')
plt.close()Alpha e sovrapposizione dei punti
Quando molti punti dati si sovrappongono nella stessa area di un grafico a dispersione, i singoli punti diventano invisibili: questo fenomeno si chiama overplotting. La soluzione più semplice consiste nel ridurre l'opacità con alpha (0.0 = completamente trasparente, 1.0 = completamente opaco). Si imposti alpha=0.3 o un valore inferiore, così le aree dense appariranno più scure (perché diversi punti semitrasparenti si sovrappongono), mentre quelle poco dense rimarranno chiare. Per dataset molto grandi (milioni di punti), si considerino invece gli hexbin o le stime della densità basate sul kernel.
np.random.seed(1)
x_dense = np.random.randn(1000)
y_dense = np.random.randn(1000)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))
# Without alpha: overplotting hides density
ax1.scatter(x_dense, y_dense, s=10)
ax1.set_title('No alpha (overplotted)')
# With alpha: density visible
ax2.scatter(x_dense, y_dense, s=10, alpha=0.2)
ax2.set_title('alpha=0.2 (density visible)')
plt.tight_layout()
plt.close()Verifica rapida
Verifichi la Sua comprensione dei grafici a linee e a dispersione in Matplotlib presentati in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che: ax.plot() crea grafici a linee con pieno controllo su colore, stile della linea e marker; ax.scatter() crea grafici a dispersione con colore e dimensione specifici per ogni punto tramite c e s; ax.fill_between() aggiunge bande di confidenza; infine, ax.grid() aggiunge linee della griglia per migliorare la leggibilità. Ora creerà grafici a barre e istogrammi per visualizzare dati categorici e distribuzioni.
Domande Frequenti
La lezione «Grafici a linee e a dispersione» è gratuita?
Sì — il testo completo di «Grafici a linee e a dispersione» è 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 linee e a dispersione»?
Rappresenti dati continui con ax.plot() e punti discreti con ax.scatter(), controllando colore, marker e stile della linea. 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 a linee e a dispersione»?
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