Questo tutorial è un prezioso contributo della nostra community ed è stato revisionato da DataCamp per chiarezza e accuratezza.
Ti va di condividere le tue competenze? Ci farebbe piacere sentirti! Invia i tuoi articoli o idee tramite il nostro modulo per i contributi della community.
"Il riscaldamento globale non è una previsione. Sta accadendo" - James Hansen
Il cambiamento climatico è un tema urgente che riguarda tutti noi e la visualizzazione dei dati può essere uno strumento potente per aumentare la consapevolezza. In questo tutorial passo dopo passo imparerai a usare ggplot2 in R per creare visualizzazioni efficaci dei dati climatici storici. Alla fine di questa guida saprai dove trovare dataset curati, come tracciare dati meteorologici storici e come personalizzare i grafici per raccontare una storia coinvolgente.
Il cambiamento climatico è un tema urgente che riguarda tutti noi e la visualizzazione dei dati può essere uno strumento potente per aumentare la consapevolezza. In questo tutorial passo dopo passo imparerai a usare ggplot2 in R per creare visualizzazioni efficaci dei dati climatici storici. Alla fine di questa guida saprai dove trovare dataset curati, come tracciare dati meteorologici storici e come personalizzare i grafici per raccontare una storia coinvolgente.
In questo tutorial imparerai dove trovare dati storici affidabili e curati sulle temperature e come visualizzarli con ggplot2.
- Sapere dove trovare dataset curati con dati meteorologici storici;
- Sentirti a tuo agio nel tracciare dati meteorologici storici con ggplot2;
- Essere in grado di personalizzare i grafici ggplot2 per raccontare meglio la tua storia.
Passo 1: trovare e caricare i dati
I dati per questo tutorial sono disponibili presso i National Centers for Environmental Information (NCEI). L'NCEI è l'autorità di riferimento per i dati ambientali negli USA e fornisce dati di alta qualità su clima, ecosistemi e risorse idriche. Il dataset Global Summary of the Year (GSOY) offre dati meteorologici storici per città e stazioni. Per questo tutorial useremo i dati di Berkeley, CA. Se vuoi, puoi scegliere la città che preferisci.
I dati verranno caricati con read_csv. Il primo argomento è il percorso del file, mentre il secondo, col_select, indica a R quali colonne vuoi caricare. Tieni presente che questo dataset contiene diverse variabili, ma a noi interessano solo "DATE" e "TAVG". "DATE" contiene l'anno in cui è stata osservata la temperatura e "TAVG" è la temperatura media annua espressa in gradi Celsius. Per saperne di più sulle variabili disponibili, consulta il codebook del dataset.
library(readr)23df <- read_csv('USC00040693.csv',4 col_select = c("DATE", "TAVG"))5Rows: 118 Columns: 2── Column specification ────────────────────────────────────────────────────────Delimiter: ","dbl (2): DATE, TAVGDi seguito stamperai il dataset e le sue statistiche descrittive per farti un'idea iniziale dei dati. La funzione R summary() ci dice che i dati vanno dal 1893 al 2019 e che la temperatura media annua minima osservata in questo periodo a Berkeley, CA, è stata di 12,9 °C. La temperatura media massima è stata di 15,93 °C.

summary(df) DATE TAVG Min. :1893 Min. :12.90 1st Qu.:1926 1st Qu.:13.50 Median :1956 Median :13.91 Mean :1956 Mean :13.97 3rd Qu.:1985 3rd Qu.:14.33 Max. :2019 Max. :15.93 NA's :33 Passo 2: trattare i valori mancanti
La funzione summary() ha rivelato che ci sono 33 temperature mancanti. Puoi anche verificare gli NA di una specifica variabile usando la funzione is.na(), che restituisce TRUE se l'osservazione è un NA. Poi puoi sommare tutti i valori mancanti. La funzione sum() converte TRUE in 1.
print(paste("There are", sum(is.na(df$TAVG)), "missing values in this dataset."))[1] "There are 33 missing values in this dataset."Dato che stiamo lavorando con una serie temporale, riempiremo i valori mancanti con un'interpolazione lineare. Questo metodo presume che i dati siano variati linearmente durante il periodo mancante. In realtà, quando tracci una serie temporale con un grafico a linee, anche gli intervalli tra le osservazioni, anche quando non mancano dati, vengono comunque uniti da una linea retta che collega i due punti.
Per eseguire l'interpolazione lineare useremo il pacchetto imputeTS. Dopo aver installato e caricato la libreria, puoi usare na_interpolation() per riempire i valori mancanti. Gli passi due argomenti: per primo, la colonna del dataframe che vuoi trattare, e per secondo, il metodo che desideri usare per l'imputazione.
install.packages("imputeTS", quiet = TRUE)library(imputeTS)Registered S3 method overwritten by 'quantmod': method from as.zoo.data.frame zoo df$TAVG <- na_interpolation(df$TAVG, option ="linear")Passo 3: scrivere la prima versione del grafico
Una visualizzazione ggplot2 è costruita per layer. Come mostrato nella figura qui sotto, ogni layer contiene un oggetto geom, cioè un elemento che vedi nel grafico (per esempio linee e punti).
Per prima cosa devi passare un dataset alla funzione ggplot(). Poi mapperai le variabili alle estetiche, ovvero alle proprietà visive di un oggetto geom. Le estetiche sono, ad esempio, la posizione sull'asse y, la posizione sull'asse x, il colore o la dimensione. Per saperne di più su ggplot, dai un'occhiata al corso Introduction to Data Visualization with ggplot2 di Rick Scavetta, grazie al quale ho imparato molte competenze di data visualization.

Layer di ggplot2. Immagine creata dall'autore.
Qui sotto, il nostro mapping (aes()) dice a ggplot di rendere la posizione sull'asse x dipendente dalla variabile "DATE" e la posizione sull'asse y dipendente dalla temperatura. Nota che se tracci solo questo layer, ggplot mostrerà soltanto gli assi.
Inoltre, prima di iniziare a usare ggplot, imposteremo alcune configurazioni globali da applicare a tutti i grafici. La prima configurazione riguarda dimensioni e risoluzione del grafico. La seconda è il tema.
library(ggplot2)options(repr.plot.width = 10, repr.plot.height = 6, repr.plot.res = 150 )theme_set(theme_bw())axes <- ggplot(data = df, aes(x = DATE, y = TAVG))axes
Ora puoi aggiungere un secondo layer con i punti che indicano le temperature nel tempo. Nota che puoi aggiungere il layer al grafico creato nel passaggio precedente.
dot_plot <- axes + geom_point()dot_plot
Infine, puoi aggiungere un terzo layer contenente le linee. È importante sottolineare che alcuni autori sostengono che le linee non rappresentino dati osservati e vadano usate con cautela. Per una discussione completa, consulta il capitolo 13 di Fundamentals of Data Visualization di Claus O. Wilke.
dot_plot +geom_line()
Passo 4: personalizzare il grafico
In questa sezione imparerai a personalizzare il grafico per renderlo chiaro, informativo e gradevole.
Per prima cosa, per rendere più visibile l'aumento della temperatura, mapperemo anche l'estetica del colore dei punti a "TAVG". Poiché è una variabile numerica, ggplot2 userà una sfumatura per rappresentare come colori i valori continui. Con la funzione scale_color_gradient() puoi scegliere quale colore rappresenterà le temperature basse e quale quelle alte.
Inoltre, puoi impostare le etichette degli assi x e y con xlab() e ylab(), rispettivamente. Un titolo può essere aggiunto con ggtitle(). Infine, aumenteremo la dimensione dei punti e aggiungeremo trasparenza per rendere visibili i dati sovrapposti.
ggplot(data = df, aes(x = DATE, y = TAVG, color = TAVG))+geom_point(size = 7, alpha = 0.8)+scale_color_gradient(name = "ºC", low = "#47BEFB", high = "#ED6AA8")+ggtitle("Historical air temperature trend in Berkeley, CA")+xlab("Year")+ylab("Annual Mean Temperature in Berkeley [ºC]")
Edward Tufte, esperto nel campo della visualizzazione dei dati, raccomanda di massimizzare la proporzione di inchiostro usata per mostrare dati non ridondanti. Secondo l'autore, questo rende il grafico più chiaro ed evita di distrarre chi legge.
Il tema di ggplot2 che stiamo usando (theme_bw()) è già in linea con le raccomandazioni di Tufte, ma potremmo comunque eliminare le griglie del pannello nel grafico qui sopra. Per farlo, usa la funzione theme() e passale due argomenti, panel.grid.minor = element_blank() e panel.grid.major = element_blank().
ggplot(data = df, aes(x = DATE, y = TAVG, color = TAVG))+geom_point(size = 7, alpha = 0.8)+scale_color_gradient(name = "ºC", low = "#47BEFB", high = "#ED6AA8")+ggtitle("Historical air temperature trend in Berkeley, CA")+xlab("Year")+ylab("Annual Mean Temperature in Berkeley [ºC]")+theme(# Eliminates grids: panel.grid.minor = element_blank(), panel.grid.major = element_blank())
Passo 5: creare un tema ggplot2 per la tua visualizzazione
Ora imparerai a creare un tuo tema ggplot2. Come esempio, creeremo un theme_datacamp() per rendere il grafico più coerente e armonioso con il sito di DataCamp.
Per prima cosa, è stata creata una lista con alcuni colori di DataCamp per un uso futuro.
datacamp_colors <- list(green = "#74F065", darkblue = "#05192D", blue = "#47BEFB", pink = "#ED6AA8")In secondo luogo, caricheremo un Google Font chiamato "Manjari" da usare nel nostro tema. Puoi caricarlo facilmente con il pacchetto "showtext". Se non lo hai, installalo.
install.packages("showtext", quiet = TRUE)Qui sotto carichiamo il pacchetto e usiamo la funzione font_add_google() per caricare "Manjari". Diciamo anche a R di renderizzare il testo usando "showtext" con showtext_auto():
library(showtext)font_add_google("Manjari")showtext_auto()Loading required package: sysfontsLoading required package: showtextdbOra useremo theme() per personalizzare il grafico. La figura qui sotto mostra alcuni degli argomenti che puoi usare. Per un elenco completo, consulta la documentazione di ggplot2.

Argomenti del tema. Immagine creata dall'autore.
Puoi creare un nuovo tema con una funzione che richiama la funzione theme() di ggplot2 contenente le tue specifiche personalizzate. Nota che partiamo dal tema in bianco e nero (theme_bw()) e poi eliminiamo le griglie e cambiamo i colori di sfondo, pannello e testo. Inoltre, viene aggiunto un margine di 0,5 cm al grafico. Per facilitare futuri cambiamenti, sono stati creati due argomenti per permettere all'utente di specificare i colori desiderati per testo, pannello e sfondo.
theme_datacamp <- function(text_panel_color, background_color) { theme_bw()+ theme(text=element_text(size=28, family="Manjari", face = "bold", color = text_panel_color), # Eliminates grids panel.grid.minor = element_blank(), panel.grid.major = element_blank(), # Changes panel, plot and legend background to dark blue panel.background = element_rect(fill = background_color), plot.background = element_rect(fill = background_color), legend.background = element_rect(fill= background_color), # Changes legend texts color to white legend.text = element_text(color = text_panel_color, margin = margin(0, 0, 0, -0.5, "cm")), legend.title = element_text(color = text_panel_color), legend.text.align = 0, # Changes color of plot border to white panel.border = element_rect(size = 1, color = text_panel_color), # Changes color of axis texts to white axis.text.x = element_text(color = text_panel_color), axis.text.y = element_text(color = text_panel_color), axis.title.x = element_text(color= text_panel_color), axis.title.y = element_text(color= text_panel_color), # Changes axis ticks color to white axis.ticks.y = element_line(color = text_panel_color), axis.ticks.x = element_line(color = text_panel_color), # Adds margin plot.margin = margin(1, 1, 1, 1, "cm") )}Ora puoi semplicemente aggiungere theme_datacamp() al grafico specificando i colori che preferisci. Qui ho usato i colori di Datacamp:
ggplot(data = df, aes(x = DATE, y = TAVG, color = TAVG))+geom_point(size = 7, alpha = 0.8)+scale_color_gradient(name = "ºC", low = datacamp_colors$blue, high = datacamp_colors$pink)+ggtitle("Historical air temperature trend in Berkeley, CA")+xlab("Year")+ylab("Annual Mean Temperature in Berkeley [ºC]")+theme_datacamp(text_panel_color = datacamp_colors$green, background_color = datacamp_colors$darkblue)
Infine, puoi mostrare l'andamento della temperatura con uno smoother LOESS (locally estimated scatterplot smoothing), come raccomandato da Claus O. Wilke nel capitolo 14 di Fundamentals of Data Visualization. Puoi farlo aggiungendo un layer di ggplot contenente l'elemento geom_smooth().
ggplot(data = df, aes(x = DATE, y = TAVG, color = TAVG))+geom_point(size = 7, alpha = 0.8)+geom_smooth(color = datacamp_colors$green, se = FALSE)+scale_color_gradient(name = "ºC", low = datacamp_colors$blue, high = datacamp_colors$pink)+ggtitle("Historical air temperature trend in Berkeley, CA", subtitle = "Visualization using theme_datacamp()")+xlab("Year")+ylab("Annual Mean Temperature in Berkeley [ºC]")+theme_datacamp(text_panel_color = datacamp_colors$green, background_color = datacamp_colors$darkblue)
Sentiti libero di provare altre combinazioni di colori e font per ottenere le visualizzazioni più efficaci. Qui sotto, per esempio, cambio la curva LOESS, il pannello e il colore del testo in bianco.
ggplot(data = df, aes(x = DATE, y = TAVG, color = TAVG))+geom_point(size = 7, alpha = 0.8)+geom_smooth(color = "white", se = FALSE)+scale_color_gradient(name = "ºC", low = datacamp_colors$blue, high = datacamp_colors$pink)+ggtitle("Historical air temperature trend in Berkeley, CA", subtitle = "Visualization using theme_datacamp()")+xlab("Year")+ylab("Annual Mean Temperature in Berkeley [ºC]")+theme_datacamp(text_panel_color = "white", background_color = datacamp_colors$darkblue)
Conclusione
In questo tutorial hai imparato a usare ggplot2 in R per visualizzare efficacemente i dati climatici storici. Abbiamo coperto tutto, dal reperimento di dati affidabili alla creazione di un tema ggplot2 personalizzato, dandoti gli strumenti per aumentare la consapevolezza sul cambiamento climatico attraverso la visualizzazione dei dati.
Come prossimo passo, valuta di approfondire la visualizzazione dei dati e la programmazione in R con i corsi di DataCamp Introduction to Data Visualization with ggplot2 e Intermediate R. Questi corsi ti aiuteranno a sviluppare le competenze acquisite qui e a affrontare progetti più complessi.

