Deze tutorial is een waardevolle bijdrage uit onze community en is door DataCamp geredigeerd voor duidelijkheid en nauwkeurigheid.
Wil je je eigen expertise delen? We horen graag van je! Dien je artikelen of ideeën in via ons Community Contribution Formulier.
"Opwarming van de aarde is geen voorspelling. Het gebeurt" - James Hansen
Klimaatverandering is een urgente kwestie die ons allemaal raakt, en datavisualisatie kan een krachtig middel zijn om bewustzijn te vergroten. In deze stapsgewijze tutorial leer je hoe je ggplot2 in R gebruikt om impactvolle visualisaties te maken van historische klimaatdata. Aan het einde van deze gids weet je hoe je gecureerde datasets vindt, historische weerdata plot en je grafieken aanpast om een overtuigend verhaal te vertellen.
Klimaatverandering is een urgente kwestie die ons allemaal raakt, en datavisualisatie kan een krachtig middel zijn om bewustzijn te vergroten. In deze stapsgewijze tutorial leer je hoe je ggplot2 in R gebruikt om impactvolle visualisaties te maken van historische klimaatdata. Aan het einde van deze gids weet je hoe je gecureerde datasets vindt, historische weerdata plot en je grafieken aanpast om een overtuigend verhaal te vertellen.
In deze tutorial leer je waar je betrouwbare en gecureerde historische temperatuurdata vindt en hoe je die visualiseert met ggplot2.
- Weet waar je gecureerde datasets met historische weerdata kunt vinden;
- Voel je vertrouwd met het plotten van historische weerdata met ggplot2;
- Kun je je ggplot2-grafieken aanpassen om je verhaal beter te vertellen.
Stap 1: De data vinden en laden
Data voor deze tutorial is beschikbaar bij de National Centers for Environmental Information (NCEI). De NCEI is de toonaangevende autoriteit voor omgevingsdata in de VS en levert hoogwaardige data over klimaat, ecosystemen en watervoorraden. De Global Summary of the Year (GSOY)-dataset biedt historische weerdata per stad en station. Voor deze tutorial gebruiken we data van Berkeley, CA. Je kunt desgewenst je eigen voorkeursstad kiezen.
Data wordt geladen met read_csv. Het eerste argument is het bestandspad, terwijl het tweede, col_select, R vertelt welke kolommen je wilt laden. Let op: deze dataset bevat verschillende variabelen, maar wij zijn alleen geïnteresseerd in "DATE" en "TAVG". "DATE" bevat het jaar waarin de temperatuur is waargenomen en "TAVG" is de gemiddelde jaartemperatuur in graden Celsius. Raadpleeg de datasetcodeboek voor meer informatie over de beschikbare variabelen.
library(readr)23df <- read_csv('USC00040693.csv',4 col_select = c("DATE", "TAVG"))5Rows: 118 Columns: 2── Column specification ────────────────────────────────────────────────────────Delimiter: ","dbl (2): DATE, TAVGHieronder print je je dataset en de samenvattende statistieken om een eerste idee van je data te krijgen. De R-functie summary() vertelt ons dat de data loopt van 1893 tot 2019 en dat de minimale gemiddelde jaartemperatuur in deze periode 12,9 °C was in Berkeley, CA. De maximale gemiddelde temperatuur was 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 Stap 2: Ontbrekende waarden behandelen
De functie summary() liet zien dat er 33 ontbrekende temperaturen zijn. Je kunt NAs van een specifieke variabele ook controleren met de functie is.na(), die TRUE teruggeeft als de observatie een NA is. Vervolgens kun je alle ontbrekende waarden optellen. De functie sum() zet TRUE om 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."Aangezien we met een tijdreeks werken, vullen we ontbrekende waarden op met lineaire interpolatie. Deze methode gaat ervan uit dat de data tijdens de ontbrekende periode lineair varieerde. Wanneer je een tijdreeks met een lijngrafiek plot, worden de intervallen tussen observaties, zelfs als er geen data ontbreekt, ook opgevuld met een rechte lijn die de twee punten verbindt.
Voor lineaire interpolatie gebruiken we het pakket imputeTS. Na het installeren en laden van de bibliotheek kun je na_interpolation() gebruiken om de ontbrekende waarden op te vullen. Je geeft twee argumenten mee: eerst de dataframekolom die je wilt behandelen, en ten tweede de methode die je wilt gebruiken voor de imputatie.
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")Stap 3: De eerste versie van onze plot coderen
Een ggplot2-visualisatie is opgebouwd uit lagen. Zoals in de figuur hieronder te zien is, bevat elke laag één geom-object, oftewel één element dat je in je grafiek ziet (bijvoorbeeld lijnen en punten).
Eerst geef je een dataset door aan de functie ggplot(). Vervolgens koppel je variabelen aan esthetiek—visuele eigenschappen van een geom-object. Voorbeelden van esthetiek zijn de positie op de y-as, de positie op de x-as, kleur of grootte. Wil je meer weten over ggplot, bekijk dan de cursus Introduction to Data Visualization with ggplot2 van Rick Scavetta, bij wie ik veel datavisualisatievaardigheden heb geleerd.

Ggplot2-lagen. Afbeelding gemaakt door de auteur.
Hieronder vertelt onze mapping (aes()) ggplot dat de positie op de x-as afhangt van de variabele "DATE" en de positie op de y-as van de temperatuur. Merk op dat als je alleen deze laag plot, ggplot je alleen de assen laat zien.
Voordat we ggplot gaan gebruiken, stellen we enkele globale configuraties in die we op al onze plots willen toepassen. De eerste configuratie is het formaat en de resolutie van de plot. De tweede is het thema.
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
Nu kun je een tweede laag toevoegen met punten die de temperaturen door de tijd heen aangeven. Merk op dat je de laag kunt toevoegen aan de plot die je in de vorige stap maakte.
dot_plot <- axes + geom_point()dot_plot
Ten slotte kun je een derde laag toevoegen met de lijnen. Het is belangrijk om te benadrukken dat sommige auteurs stellen dat de lijnen geen waargenomen data vertegenwoordigen en met zorg moeten worden gebruikt. Voor een volledige discussie, bekijk hoofdstuk 13 van Fundamentals of Data Visualization door Claus O. Wilke.
dot_plot +geom_line()
Stap 4: Je plot aanpassen
In deze sectie leer je hoe je je plot aanpast zodat die duidelijk, informatief en mooi wordt.
Om de temperatuurstijging zichtbaarder te maken, koppelen we de kleuresthetiek van de punten ook aan "TAVG". Omdat het een numerieke variabele is, gebruikt ggplot2 een gradiënt om continue waarden als kleuren weer te geven. Met de functie scale_color_gradient() kun je kiezen welke kleur lage temperaturen en welke hoge temperaturen vertegenwoordigt.
Daarnaast kun je de labels van de x- en y-as instellen met respectievelijk xlab() en ylab(). Met ggtitle() kun je een titel toevoegen. Tot slot vergroten we de grootte van de punten en voegen we transparantie toe om overlappende data zichtbaar te maken.
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, een expert op het gebied van datavisualisatie, raadt aan om het aandeel inkt dat wordt gebruikt om niet-redundante data weer te geven te maximaliseren. Volgens hem maakt dat je plot helderder en voorkomt het dat je lezer wordt afgeleid.
Het ggplot2-thema dat we gebruiken (theme_bw()) sluit al aan bij Tufte’s aanbevelingen, maar we kunnen de rasterlijnen in de bovenstaande plot nog weghalen. Gebruik daarvoor de functie theme() en geef twee argumenten door: panel.grid.minor = element_blank() en 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())
Stap 5: Een ggplot2-thema maken voor je visualisatie
Je leert nu hoe je je eigen ggplot2-thema maakt. Als voorbeeld maken we een theme_datacamp() om onze plot consistenter en harmonieuzer te maken met de DataCamp-website.
Eerst is een lijst met enkele DataCamp-kleuren aangemaakt voor later gebruik.
datacamp_colors <- list(green = "#74F065", darkblue = "#05192D", blue = "#47BEFB", pink = "#ED6AA8")Vervolgens laden we een Google Font genaamd "Manjari" om in ons thema te gebruiken. Je kunt die eenvoudig laden met het pakket "showtext". Als je het nog niet hebt, installeer het dan.
install.packages("showtext", quiet = TRUE)Hieronder laden we het pakket en gebruiken we de functie font_add_google() om "Manjari" te laden. We vertellen R ook om tekst te renderen met "showtext" via showtext_auto():
library(showtext)font_add_google("Manjari")showtext_auto()Loading required package: sysfontsLoading required package: showtextdbNu gaan we theme() gebruiken om de grafiek aan te passen. De onderstaande figuur laat enkele argumenten zien die je kunt gebruiken. Raadpleeg de ggplot2-referentie voor een volledige lijst.

Thema-argumenten. Afbeelding gemaakt door de auteur.
Je kunt een nieuw thema maken met een functie die de ggplot2-functie theme() aanroept met jouw aangepaste specificaties. Let op: we beginnen vanuit het zwart-wit-thema (theme_bw()) en verwijderen vervolgens de rasters en veranderen de achtergrond-, paneel- en tekstkleuren. Daarnaast wordt een marge van 0,5 cm aan de plot toegevoegd. Om toekomstige wijzigingen te vergemakkelijken, zijn twee argumenten gemaakt waarmee de gebruiker de gewenste tekst-, paneel- en achtergrondkleuren kan opgeven.
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") )}Nu kun je simpelweg theme_datacamp() aan je plot toevoegen en je voorkeurskleuren specificeren. Hier heb ik Datacamp-kleuren gebruikt:
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)
Tot slot kun je de temperatuurtrend laten zien met een LOESS-smoother (locally estimated scatterplot smoothing), zoals aanbevolen door Claus O. Wilke in hoofdstuk 14 van Fundamentals of Data Visualization. Dat doe je door een ggplot-laag toe te voegen met het element 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)
Voel je vrij om andere kleur- en lettertypecombinaties te testen om de meest overtuigende visualisaties te maken. Hieronder verander ik bijvoorbeeld de LOESS-curve, het paneel en de tekstkleur naar wit.
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)
Conclusie
In deze tutorial heb je geleerd hoe je ggplot2 in R gebruikt om historische klimaatdata effectief te visualiseren. We hebben alles behandeld: van het vinden van betrouwbare data tot het maken van een aangepast ggplot2-thema, zodat je met datavisualisatie bewustzijn over klimaatverandering kunt vergroten.
Als volgende stap kun je je verder verdiepen in datavisualisatie en R-programmeren met DataCamps Introduction to Data Visualization with ggplot2 en Intermediate R-cursussen. Deze cursussen helpen je voort te bouwen op de vaardigheden die je hier hebt opgedaan en maken je klaar voor complexere projecten.
