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!

✎ Esercizi

Scrivi il codice a mano nel tuo notebook Jupyter: non copiare.

  1. Le temperature della settimana

    Base

    Disegna un grafico a linee con le temperature di 7 giorni. Aggiungi titolo, etichette degli assi, marcatori sui punti e griglia.

  2. I voti per materia

    Intermedio

    Grafico a barre con la media di 6 materie. Colora di rosso le barre sotto il 6 e di verde le altre.

    Suggerimento

    colori = ['red' if v < 6 else 'green' for v in medie] e poi plt.bar(materie, medie, color=colori)

  3. Studio e voti

    Intermedio

    Grafico a dispersione con 10 coppie (ore di studio, voto) inventate. C'è correlazione? Scrivi una riga di commento sotto il grafico.

  4. Quattro grafici in uno

    Sfida

    Genera 200 altezze con np.random.normal(170, 10, 200) e disegna l'istogramma con 20 classi e una linea verticale sulla media (plt.axvline). Poi metti i quattro grafici in una figura 2×2 con plt.subplots e salvala con savefig.

📝 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! 🎸