# Verifica installazione
library(ggplot2)
# Primo grafico
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
labs(title = "Il mio primo ggplot!")Giorno 1 - Fondamenti di ggplot2
Benvenuti! 🎨
Benvenuti al primo giorno del corso di Data Visualization con ggplot2!
Materiali
Slides
- Introduzione al Corso (da aggiungere)
- Grammar of Graphics (da aggiungere)
- Geometrie Base (da aggiungere)
- Estetiche e Mappature (da aggiungere)
- Facets e Coordinate (da aggiungere)
Script
- 01_intro.R (da aggiungere)
- 02_grammar.R (da aggiungere)
- 03_geoms.R (da aggiungere)
- 04_aesthetics.R (da aggiungere)
- 05_facets.R (da aggiungere)
Programma Dettagliato
9:30 - 10:00: Introduzione al Corso
Obiettivi:
- Presentazione del corso e degli obiettivi
- Panoramica di ggplot2 e della Grammar of Graphics
- Setup e verifica ambiente di lavoro
Codice di esempio:
10:00 - 10:45: Fondamenti di ggplot2
Concetti chiave:
- Grammar of Graphics: La grammatica layered di ggplot2
- Componenti principali:
- Data
- Aesthetics (aes)
- Geometries (geom)
- Statistics
- Scales
- Coordinates
- Facets
- Themes
Struttura di un grafico ggplot2:
ggplot(data = <DATA>) +
<GEOM_FUNCTION>(
mapping = aes(<MAPPINGS>),
stat = <STAT>,
position = <POSITION>
) +
<SCALE_FUNCTION>() +
<COORD_FUNCTION>() +
<FACET_FUNCTION>() +
<THEME_FUNCTION>()Esempio pratico:
library(ggplot2)
library(palmerpenguins)
# Carica i dati
data(penguins)
# Anatomia di un grafico ggplot2
ggplot(data = penguins,
mapping = aes(x = flipper_length_mm,
y = body_mass_g)) +
geom_point()10:45 - 11:15: ☕ Pausa
11:15 - 12:30: Geometrie Base
Geometrie principali:
geom_point() - Scatterplots
# Base scatterplot
ggplot(penguins, aes(flipper_length_mm, body_mass_g)) +
geom_point()
# Con colore
ggplot(penguins, aes(flipper_length_mm, body_mass_g)) +
geom_point(aes(color = species))
# Dimensione e trasparenza
ggplot(penguins, aes(flipper_length_mm, body_mass_g)) +
geom_point(aes(color = species, size = bill_length_mm), alpha = 0.6)geom_line() - Line plots
library(dplyr)
# Dati aggregati per anno
penguins_year <- penguins %>%
filter(!is.na(body_mass_g)) %>%
group_by(year, species) %>%
summarise(mean_mass = mean(body_mass_g), .groups = "drop")
# Line plot
ggplot(penguins_year, aes(year, mean_mass, color = species)) +
geom_line(linewidth = 1) +
geom_point(size = 3)geom_bar() e geom_col() - Bar charts
# Count bar chart
ggplot(penguins, aes(species)) +
geom_bar()
# Bar chart con valori
species_count <- penguins %>%
count(species)
ggplot(species_count, aes(species, n)) +
geom_col(fill = "steelblue")
# Stacked bars
ggplot(penguins, aes(species, fill = island)) +
geom_bar()
# Dodged bars
ggplot(penguins, aes(species, fill = island)) +
geom_bar(position = "dodge")geom_histogram() - Histograms
# Histogram base
ggplot(penguins, aes(body_mass_g)) +
geom_histogram(bins = 30)
# Con colore per specie
ggplot(penguins, aes(body_mass_g, fill = species)) +
geom_histogram(bins = 30, alpha = 0.6)geom_boxplot() - Box plots
# Boxplot base
ggplot(penguins, aes(species, body_mass_g)) +
geom_boxplot()
# Con colore
ggplot(penguins, aes(species, body_mass_g, fill = species)) +
geom_boxplot() +
theme(legend.position = "none")12:30 - 13:30: 🍕 Pausa Pranzo
13:30 - 15:00: Estetiche e Mappature
Estetiche principali:
- Position: x, y
- Color: colour, fill, alpha
- Shape: shape, size, linewidth
- Text: label
- Group: group
Mappature vs Impostazioni fisse:
# Mappatura (dentro aes) - varia con i dati
ggplot(penguins, aes(flipper_length_mm, body_mass_g)) +
geom_point(aes(color = species))
# Impostazione fissa (fuori aes) - uguale per tutti
ggplot(penguins, aes(flipper_length_mm, body_mass_g)) +
geom_point(color = "blue", size = 3, alpha = 0.5)Scale per le estetiche:
# Scala colori manuale
ggplot(penguins, aes(flipper_length_mm, body_mass_g, color = species)) +
geom_point() +
scale_color_manual(values = c("darkorange", "purple", "cyan4"))
# Scala dimensioni
ggplot(penguins, aes(flipper_length_mm, body_mass_g, size = bill_length_mm)) +
geom_point(alpha = 0.6) +
scale_size_continuous(range = c(1, 8))15:00 - 15:30: ☕ Pausa
15:30 - 16:30: Facets e Coordinate
Facets - Suddividere in pannelli
# facet_wrap() - una variabile
ggplot(penguins, aes(flipper_length_mm, body_mass_g)) +
geom_point() +
facet_wrap(~species)
# facet_wrap() con controllo layout
ggplot(penguins, aes(flipper_length_mm, body_mass_g)) +
geom_point() +
facet_wrap(~species, ncol = 1)
# facet_grid() - due variabili
ggplot(penguins, aes(flipper_length_mm, body_mass_g)) +
geom_point() +
facet_grid(species ~ island)
# Scale libere
ggplot(penguins, aes(flipper_length_mm, body_mass_g)) +
geom_point() +
facet_wrap(~species, scales = "free")Coordinate
# Flip coordinate
ggplot(penguins, aes(species, body_mass_g)) +
geom_boxplot() +
coord_flip()
# Zoom (cartesian)
ggplot(penguins, aes(flipper_length_mm, body_mass_g)) +
geom_point() +
geom_smooth() +
coord_cartesian(xlim = c(180, 230), ylim = c(3500, 5500))
# Fixed ratio
ggplot(penguins, aes(bill_length_mm, bill_depth_mm)) +
geom_point() +
coord_fixed(ratio = 1)16:30 - 17:00: Esercitazioni Pratiche
Esercizio 1: Creare uno scatterplot che mostri la relazione tra lunghezza del becco e profondità del becco, colorato per specie.
Esercizio 2: Creare un bar chart che mostri il conteggio di pinguini per isola, con barre separate per sesso.
Esercizio 3: Creare un grafico con facet che mostri la distribuzione della massa corporea per ogni combinazione di specie e sesso.
Soluzioni disponibili (da aggiungere)
Dataset Utilizzati
palmerpenguins
Il dataset penguins contiene misurazioni di 344 pinguini di 3 specie nell’arcipelago Palmer, Antartide.
library(palmerpenguins)
data(penguins)
# Variabili
names(penguins)
# species, island, bill_length_mm, bill_depth_mm,
# flipper_length_mm, body_mass_g, sex, yearmtcars
Dataset classico con dati su automobili.
data(mtcars)
head(mtcars)Risorse Aggiuntive
Compiti per Casa 📚
- Installare i pacchetti per il Giorno 2
- Esplorare il dataset
diamondscon almeno 3 grafici diversi - Leggere il capitolo sulle scale nel libro ggplot2 book
Domande? Usa il canale Slack o contatta il docente!