Riepilogo del Corso - Data Visualization con ggplot2
Cosa abbiamo imparato:
Giorno 1: Fondamenti
Giorno 2: Avanzato
I Componenti Essenziali:
Formula base:
Layer by Layer
ggplot2 costruisce grafici per strati successivi. Ogni + aggiunge un elemento.
Separazione Dati/Estetica
Questa separazione permette riproducibilità e flessibilità!
Warning
Errore comune: Mettere valori fissi dentro aes() crea legende inutili!
Processo iterativo per creare grafici efficaci:
1. Prepara i Dati
readrdplyr2. Esplora con ggplot2
geom_point())3. Raffina
4. Personalizza
theme()1. Chiarezza Prima di Tutto
2. Colori Accessibili
# Preferisci viridis
scale_color_viridis_d()
scale_fill_viridis_c()
# ColorBrewer per discrete
scale_color_brewer(palette = "Set2")Guida rapida per tipo di dato:
| Obiettivo | Tipo Dati | Geometria | Quando Usare |
|---|---|---|---|
| Relazione | 2 continue | geom_point(), geom_smooth() |
Correlazioni, scatter |
| Distribuzione | 1 continua | geom_histogram(), geom_density() |
Esplorare forma distribuzione |
| Comparazione | Continua + Categorica | geom_boxplot(), geom_violin() |
Confrontare gruppi |
| Conteggi | Categorica | geom_bar(), geom_col() |
Frequenze, totali |
| Evoluzione | Tempo + Valore | geom_line(), geom_area() |
Time series, trend |
| Composizione | Parti di un tutto | geom_col(position="fill") |
Proporzioni nel tempo |
| Multidimensionale | Matrice valori | geom_tile() (heatmap) |
Gene expression, correlazioni |
Tip
Quando in dubbio, inizia con geom_point() per esplorare!
Best Practices per Script:
# 1. Header informativo
# Titolo: Analisi MPG Dataset
# Autore: Marco Chiapello
# Data: 2025-10-28
# Scopo: Esplorare relazione mpg-displ
# 2. Setup esplicito
library(tidyverse)
library(patchwork)
# 3. Import dati documentato
data(mpg)
# oppure
# mpg <- read_csv("data/mpg.csv")
# 4. Commenta scelte chiave
# Uso log scale per range ampio
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
scale_x_log10()Salvataggio Professionale:
# 5. Salva con parametri espliciti
ggsave(
"output/mpg_analysis.png",
width = 8,
height = 6,
dpi = 300,
bg = "white"
)
# 6. Per pubblicazioni
ggsave(
"figures/fig1.pdf",
width = 7,
height = 5,
device = cairo_pdf
)Versionamento
Usa Git per tracciare evoluzione dei grafici!
ggrepel per etichette:
library(ggrepel)
# Evita sovrapposizioni
ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
geom_text_repel(
aes(label = rownames(mtcars))
)
# Solo subset
top_cars <- mtcars[mtcars$mpg > 25, ]
ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
geom_text_repel(
data = top_cars,
aes(label = rownames(top_cars)),
color = "red"
)Heatmaps per matrici:
# Formato long
heatmap_data <- data %>%
pivot_longer(
cols = -id,
names_to = "var",
values_to = "value"
) %>%
group_by(var) %>%
mutate(scaled = scale(value)[,1])
# Plot
ggplot(heatmap_data,
aes(var, id, fill = scaled)) +
geom_tile() +
scale_fill_gradient2(
low = "blue",
mid = "white",
high = "red"
)Volcano plots per DEG:
# Categorizza
deg_data <- data %>%
mutate(
regulation = case_when(
log2FC > 1 & padj < 0.05 ~ "Up",
log2FC < -1 & padj < 0.05 ~ "Down",
TRUE ~ "NS"
)
)
# Plot
ggplot(deg_data,
aes(log2FC, -log10(padj),
color = regulation)) +
geom_point(alpha = 0.6) +
geom_vline(xintercept = c(-1, 1),
linetype = "dashed") +
geom_hline(yintercept = -log10(0.05),
linetype = "dashed")ggplot2 Specifici:
📘 ggplot2: Elegant Graphics for Data Analysis - Hadley Wickham et al. - LA risorsa ufficiale - Teoria + pratica - Gratuito online
📗 R Graphics Cookbook - Winston Chang - Ricette pratiche - Problem-solving oriented
Workflow e Fondamenti:
📙 R for Data Science - Wickham & Grolemund - Intero workflow data science - ggplot2 integrato
📕 Fundamentals of Data Visualization - Claus Wilke - Principi di design - Non solo R - Teoria visuale
Documentazione:
🔗 ggplot2.tidyverse.org - Documentazione ufficiale - Reference completa - Esempi per ogni funzione
🔗 R Graph Gallery - 400+ esempi - Codice copy-paste - Organizzato per tipo
🔗 ggplot2 Extensions - Lista pacchetti estensioni - Categorie specializzate - Sempre aggiornato
Community e Aiuto:
💬 RStudio Community - Forum ufficiale - Molto attivo - Esperti disponibili
💬 Stack Overflow #ggplot2 - 50,000+ domande - Cerca prima di postare - Riproducibilità essenziale
📊 TidyTuesday - Dataset settimanali - Pratica con dati reali - Community condivisione
Posit Cheatsheets:
📄 Data Visualization with ggplot2
📄 Altri utili:
Come usarli:
Tip
Pratica Attiva
Il modo migliore per imparare:
Obiettivo: Applicare tutto ciò che hai imparato in un progetto integrato
Requisiti minimi:
1. Data Preparation
2. Exploratory Analysis
3. Advanced Features
facet_wrap() o facet_grid()4. Professional Polish
Opzioni per il progetto:
Dataset Built-in R:
# Ricchi e vari
diamonds, mpg, msleep,
economics, txhousing
# Accedi facilmente
data(diamonds)
?diamonds # documentazioneTidyTuesday Archive:
Tuoi Dati:
Dataset Pubblici:
Q: Quando usare facets vs color?
A: - Color se < 6 gruppi E confronti diretti - Facets se > 6 gruppi O pattern complessi O scale molto diverse
Q: geom_col() vs geom_bar()?
A: - geom_bar(): conta osservazioni (stat = “count”), solo x - geom_col(): usa valori y forniti (stat = “identity”), x e y
Q: Trasformazione in scale o coordinate?
A: - Scale (preferito): scale_y_log10() - trasforma PRIMA di stat - Coordinate: coord_trans(y = "log10") - trasforma DOPO rendering
Q: Come gestire warning “Removed X rows containing missing values”?
A: - Verifica: summary(data), is.na() per trovare NA - Decidi: rimuovi (na.omit()), imputa, o gestisci esplicitamente - Warning è informativo, non sempre errore!
Q: Salvo con ggsave ma risoluzione bassa?
A:
Q: ggplot2 vs base R graphics?
A: ggplot2 offre: - Sintassi consistente e logica - Estetiche automatiche (legende, scale) - Temi riutilizzabili - Migliore per grafici complessi
Base R: più veloce per plot rapidissimi esplorativi
Q: Devo memorizzare tutte le funzioni?
A: NO! - Comprendi i concetti (grammar, layers) - Usa reference/cheatsheets - Google/Stack Overflow sono normali - La pratica consolida la memoria
Q: Come scegliere palette colori?
A: 1. Default: viridis (colorblind-safe) 2. Categoriche: ColorBrewer Set2, Dark2 3. Divergenti: RdBu, BrBG per dati con zero centrale 4. Custom: solo se branding/necessità specifiche
Q: Quanto tempo serve per diventare fluente?
A: - Basic plots: 2-3 settimane pratica regolare - Advanced customization: 2-3 mesi - Expert: 6-12 mesi + uso continuo
Le Vostre Domande
💬
Domande? Dubbi? Curiosità?
Marco Chiapello
📧 Email: chiapello.m@gmail.com
🐙 GitHub: @mchiapello
💼 LinkedIn: Marco Chiapello
Materiali del Corso:
🗂️ Repository: github.com/mchiapello/DataViz_2025
REVELO Training:
💬 Slack: revelotraining.slack.com
Feedback:
📝 Per favore, compila il questionario di valutazione del corso
Il tuo feedback ci aiuta a migliorare!
Buona visualizzazione! 📊✨

“The simple graph has brought more information to the data analyst’s mind than any other device.”
— John Tukey

REVELO Training - Data Viz 2025