CLASSE TERZA • MODULO 04

Matplotlib Basics

Trasforma i tuoi dati in grafici professionali e visualizzazioni accattivanti

🎯 Da Numeri a Immagini: Il Potere della Visualizzazione

Hai mai sentito dire "un'immagine vale più di mille parole"? Nel mondo dei dati, questa frase è letteralmente vera! Guarda questa differenza:

💡 Esempio Lampante

Opzione A - Solo numeri:
"Le vendite mensili sono state: 1200, 1350, 980, 1450, 1620, 1890, 2100, 1980, 2200, 2450, 2680, 3100"

Opzione B - Un grafico:
Immagina una linea che sale gradualmente con una leggera discesa a marzo, poi riparte forte fino a dicembre. 📈

Cosa noti subito dal grafico? Trend in crescita, calo primaverile, boom natalizio. Con i numeri ci avresti messo 5 minuti a capirlo!

Matplotlib è lo strumento che ti permette di trasformare elenchi di numeri noiosi in grafici che raccontano storie, rivelano pattern nascosti e convincono le persone in pochi secondi! 🎨

📊 Cos'è Matplotlib?

Matplotlib è LA libreria Python per creare visualizzazioni di dati. È come avere Photoshop, ma per i grafici! Tutto fatto con codice.

🎨 30+ Tipi di Grafici

Linee, barre, torte, dispersione, istogrammi, heatmap, 3D... e molto altro!

📈 Standard Scientifico

Usato in migliaia di paper scientifici, report aziendali e presentazioni

🔧 Controllo Totale

Puoi personalizzare ogni singolo pixel: colori, dimensioni, stili, posizioni

💡 Perché "Matplotlib"?

Il nome viene da "MAT(rix)PLOT(ting)LIB(rary)" - una libreria originalmente creata per imitare le funzionalità di plotting di MATLAB (un software scientifico). Oggi è diventata lo standard de facto in Python!

💡 Matplotlib è come...

Excel Charts: Puoi fare grafici cliccando su Excel, vero? Matplotlib fa la stessa cosa, ma con codice. Vantaggio? Automatizzazione totale! Devi fare 100 grafici diversi? Scrivi il codice una volta e lascia che Python li crei tutti per te. In Excel ti ci vorrebbero ore! 💪

🔬 Anatomia di un Grafico: Impara i Termini Tecnici

Prima di iniziare a programmare, capiamo come è fatto un grafico. È come conoscere le parti della macchina prima di guidarla!

Figure
Axes
Axis
Title
Legend
Grid
Labels
Componente Cos'è (in parole semplici) Funzione Python
Figure La "finestra" o "foglio" dove vive tutto il grafico plt.figure()
Axes L'area del grafico dove vengono disegnati i dati plt.subplot()
Axis Gli assi X e Y con i numeri/etichette plt.xlabel()
Title Il titolo del grafico (es: "Vendite 2024") plt.title()
Legend La legenda che spiega colori/simboli plt.legend()
Grid La griglia di riferimento (righe e colonne) plt.grid()
👆 Scorri la tabella orizzontalmente →

💡 Pensa al grafico come a un quadro

Figure = la cornice/tela
Axes = l'area dove dipingi
Title = il titolo dell'opera
Legend = la targhetta che spiega i simboli
Grid = le linee guida che usi per dipingere dritto

🚀 Il Tuo Primo Grafico - Passo Dopo Passo

Adesso creiamo il nostro primo grafico! Lo faremo spiegando OGNI SINGOLA RIGA. Niente sarà lasciato al caso! 💪

1 Import e Setup

🚫 SCRIVI A MANO
# Import standard - SEMPRE uguali import matplotlib.pyplot as plt import numpy as np # Solo per Jupyter Notebook %matplotlib inline

📖 Cosa Significa Ogni Riga:

import matplotlib.pyplot as plt
Importa Matplotlib con il "soprannome" plt. Questo soprannome è usato da TUTTI i programmatori Python nel mondo. È come chiamare "frigo" invece di "frigorifero" - più corto e tutti capiscono!

import numpy as np
Importa NumPy (lo abbiamo visto nel modulo precedente). Ci serve per creare i dati da visualizzare.

%matplotlib inline
Questo è un "comando magico" di Jupyter (nota il % all'inizio). Dice a Jupyter: "Mostra i grafici direttamente qui nel notebook, non aprire finestre separate". Se non usi Jupyter, puoi saltarlo!

2 Creare i Dati

🚫 SCRIVI A MANO
# Dati esempio: ore di studio vs voto ore_studio = [1, 2, 3, 4, 5, 6, 7] voti = [4, 5, 6, 7, 8, 9, 9.5] print("Ore di studio:", ore_studio) print("Voti ottenuti:", voti)

📖 Perché Questi Dati?

Ho creato dati che mostrano una relazione logica: più studi, più alto è il voto. Questi sono i dati che "racconteranno una storia" nel nostro grafico.

Nota: Sono due liste Python normali. Matplotlib può lavorare sia con liste normali che con array NumPy!

3 Creare il Grafico Base

🚫 SCRIVI A MANO
# Crea la figura (la finestra del grafico) plt.figure(figsize=(10, 6)) # Disegna la linea con i dati plt.plot(ore_studio, voti, color='blue', linewidth=2, marker='o', markersize=8, label='Relazione Studio-Voto') # Aggiungi titolo e etichette plt.title('Effetto delle Ore di Studio sul Voto', fontsize=16, fontweight='bold') plt.xlabel('Ore di Studio', fontsize=12) plt.ylabel('Voto Ottenuto', fontsize=12) # Aggiungi griglia e legenda plt.grid(True, alpha=0.3, linestyle='--') plt.legend() # Mostra il grafico plt.show()

📖 Analisi Comando per Comando:

plt.figure(figsize=(10, 6))

Crea una nuova "finestra" per il grafico. Il parametro figsize=(10, 6) specifica le dimensioni in pollici (larghezza 10, altezza 6). Più grande = grafico più leggibile, ma occupa più spazio. Dimensioni standard: (8, 6) o (10, 6).

plt.plot(ore_studio, voti, ...)

Questa è la funzione principale! Crea un grafico a linee. Vediamo TUTTI i parametri:

Parametro Valore Cosa Fa
ore_studio (lista) Valori sull'asse X (orizzontale)
voti (lista) Valori sull'asse Y (verticale)
color 'blue' Colore della linea
linewidth 2 Spessore linea in pixel
marker 'o' Simbolo sui punti: 'o'=cerchio
markersize 8 Dimensione del marker
label (testo) Nome per la legenda
👆 Scorri la tabella orizzontalmente →

plt.title(), plt.xlabel(), plt.ylabel()

Aggiungono testo al grafico. fontsize=16 indica la dimensione del carattere (più grande = più visibile). fontweight='bold' rende il testo grassetto (più professionale).

plt.grid(True, alpha=0.3, linestyle='--')

Attiva la griglia di riferimento. alpha=0.3 significa trasparenza 30% (la griglia non deve distrarre!). linestyle='--' crea linee tratteggiate.

plt.legend()

Mostra la legenda usando le label definite in plot().

plt.show()

Visualizza il grafico! In Jupyter è spesso opzionale, ma è buona pratica metterlo sempre.

🎨 RISULTATO: Vedresti un grafico con una linea blu che sale da sinistra a destra, con cerchi sui punti dati, griglia leggera sullo sfondo, e tutti i testi al posto giusto.

La linea mostra chiaramente: più studi → voto più alto! 📈

💡 Trucco per Ricordare l'Ordine:

1️⃣ Crea la figura (plt.figure())
2️⃣ Disegna i dati (plt.plot())
3️⃣ Aggiungi testi (plt.title(), plt.xlabel(), ecc.)
4️⃣ Personalizza (plt.grid(), plt.legend())
5️⃣ Mostra (plt.show())

📈 Tipi di Grafici: Quale Usare e Quando

Esistono decine di tipi di grafici. Ognuno racconta una storia diversa! Vediamo i 4 più importanti con esempi pratici.

1. Grafico a Linee (plt.plot) - Per Trend nel Tempo

💡 Quando Usarlo

Perfetto per: Temperature nel tempo, vendite mensili, crescita popolazione, andamento borsa
Perché: Mostra chiaramente COME qualcosa cambia nel tempo
Esempio vita reale: Grafico del tuo peso durante una dieta

🚫 SCRIVI A MANO
# Esempio: Temperature settimanali giorni = ['Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab', 'Dom'] temp_max = [22, 24, 26, 23, 25, 28, 30] temp_min = [15, 16, 18, 16, 17, 20, 22] plt.figure(figsize=(10, 6)) # Due linee nello stesso grafico! plt.plot(giorni, temp_max, 'r-o', label='Max', linewidth=2) plt.plot(giorni, temp_min, 'b-s', label='Min', linewidth=2) plt.title('Temperature Settimanali', fontsize=14) plt.xlabel('Giorno') plt.ylabel('Temperatura (°C)') plt.grid(True, alpha=0.3) plt.legend() plt.show()

📖 Formato Stringa Abbreviato:

'r-o' e 'b-s' sono formati abbreviati che combinano colore, stile linea e marker in una sola stringa!

Codice Colore Linea Marker
'r-o' r = red (rosso) - = continua o = cerchio
'b-s' b = blue (blu) - = continua s = quadrato
'g--^' g = green -- = tratteggiata ^ = triangolo
👆 Scorri →

2. Grafico a Barre (plt.bar) - Per Confronti

💡 Quando Usarlo

Perfetto per: Confrontare categorie diverse, vendite per prodotto, voti per materia
Perché: Facilita il confronto visivo immediato tra valori
Esempio vita reale: Confronto prezzi tra supermercati diversi

🚫 SCRIVI A MANO
# Esempio: Vendite per prodotto prodotti = ['Laptop', 'Tablet', 'Phone', 'Monitor'] vendite = [120, 85, 200, 75] colori = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4'] plt.figure(figsize=(10, 6)) bars = plt.bar(prodotti, vendite, color=colori, alpha=0.8) plt.title('Vendite per Prodotto', fontsize=14) plt.xlabel('Prodotto') plt.ylabel('Unità Vendute') plt.grid(axis='y', alpha=0.3) # Aggiungere numeri sopra le barre for bar in bars: height = bar.get_height() plt.text(bar.get_x() + bar.get_width()/2, height + 3, f'{int(height)}', ha='center', fontweight='bold') plt.show()

📖 Tecniche Avanzate:

plt.grid(axis='y') crea griglia solo orizzontale. Perché? Le griglie verticali in grafici a barre distraggono!

Annotazioni con plt.text(): Aggiunge testo sopra ogni barra. bar.get_x() = posizione X, bar.get_width()/2 = centro barra, ha='center' = allineamento centrale.

3. Grafico a Dispersione (plt.scatter) - Per Correlazioni

💡 Quando Usarlo

Perfetto per: Verificare se due cose sono collegate (altezza-peso, studio-voto)
Perché: Mostra se i punti formano un pattern (correlazione)
Esempio vita reale: Verificare se chi dorme di più ha voti migliori

🚫 SCRIVI A MANO
# Esempio: Ore di sonno vs Voto np.random.seed(42) ore_sonno = np.random.uniform(5, 9, 30) voti = 3 + 0.8 * ore_sonno + np.random.normal(0, 0.5, 30) plt.figure(figsize=(10, 6)) scatter = plt.scatter(ore_sonno, voti, c=voti, cmap='RdYlGn', s=100, alpha=0.7, edgecolor='black') plt.title('Correlazione Sonno-Voto', fontsize=14) plt.xlabel('Ore di Sonno') plt.ylabel('Voto Medio') plt.grid(True, alpha=0.3) plt.colorbar(scatter, label='Voto') plt.show()

📖 Nuovi Concetti:

c=voti = colore basato sul valore del voto! Ogni punto avrà un colore diverso.

cmap='RdYlGn' = Red-Yellow-Green colormap (semaforo!). Voti bassi = rosso, medi = giallo, alti = verde.

plt.colorbar() = aggiunge la barra colori laterale che spiega cosa significa ogni colore!

4. Istogramma (plt.hist) - Per Distribuzioni

💡 Quando Usarlo

Perfetto per: Capire come sono distribuiti i dati (quanti hanno voti 6-7, quanti 7-8...)
Perché: Mostra la "forma" dei dati (normale? uniforme?)
Esempio vita reale: Distribuzione altezze in una classe

🚫 SCRIVI A MANO
# Esempio: Distribuzione voti di 100 studenti np.random.seed(42) voti_studenti = np.random.normal(7, 1.5, 100) voti_studenti = np.clip(voti_studenti, 2, 10) plt.figure(figsize=(10, 6)) plt.hist(voti_studenti, bins=15, color='skyblue', edgecolor='black', alpha=0.7) plt.title('Distribuzione Voti (100 Studenti)') plt.xlabel('Voto') plt.ylabel('Numero di Studenti') plt.grid(axis='y', alpha=0.3) # Linea verticale sulla media media = voti_studenti.mean() plt.axvline(media, color='red', linestyle='--', linewidth=2, label=f'Media: {media:.1f}') plt.legend() plt.show()

📖 Istogrammi Spiegati:

bins=15 = divide i dati in 15 "classi" (barre). Più bins = più dettaglio, meno bins = più semplice.

edgecolor='black' = bordo nero alle barre. Senza questo, le barre si fondono!

plt.axvline(media) = aggiunge linea verticale sulla media. Perfetto per evidenziare valori importanti!

📝 Riepilogo e Prossimi Passi

Congratulazioni! Hai appena imparato le basi di Matplotlib! 🎉

✅ Cosa Hai Imparato:

  • Anatomia grafico: Figure, Axes, Title, Legend, Grid
  • Grafico base: figure(), plot(), show()
  • 4 tipi grafici: Linee, Barre, Dispersione, Istogrammi
  • Personalizzazione: Colori, marker, dimensioni, griglie
  • Annotazioni: Testi, linee verticali
  • Quando usare quale: Trend→Linee, Confronti→Barre, Correlazioni→Scatter

🎯 Prossima Lezione: GUI con Tkinter

Nel prossimo modulo imparerai a creare interfacce grafiche complete con bottoni, input, finestre... Potrai costruire vere applicazioni desktop con Python! 💻✨

💪 Consiglio per Imparare Davvero:

NON copiare e incollare il codice! Scrivilo A MANO almeno 3 volte. Solo così sviluppi la "memoria muscolare" della programmazione. È come imparare a suonare la chitarra: devi FARE, non solo guardare! 🎸