Deel 4
Krachtige visualisaties met ggplot2
03/05/2022
ggplot2
? --- (doorklikken)base
De generieke plot()
functie
plot(RIASEC$age)
base
De generieke plot()
functie
plot(table(RIASEC$Geslacht))
base
De generieke plot()
functie
plot(RIASEC$age, RIASEC$Conventional)
base
De boxplot()
functie
boxplot(RIASEC$Conventional)
base
De hist()
functie
hist(RIASEC$Conventional)
Theoretisch uiteenrafelen van data visualisaties
Vormt de basis van verschillende moderne grafische applicaties:
Slide gebaseerd op slides van Thomas Lin Pedersen https://github.com/thomasp85/ggplot2_workshop/blob/master/presentation.pdf
Slide uit slideshow van Thomas Lin Pedersen https://github.com/thomasp85/ggplot2_workshop/blob/master/presentation.pdf
Group | Country | Gender | Mean_age | Sd_age | CI_lower | CI_upper |
---|---|---|---|---|---|---|
BE Male | BE | Male | 39 | 11.0 | 17.44 | 60.56 |
BE Female | BE | Female | 41 | 13.2 | 15.13 | 66.87 |
BE Other | BE | Other | 36 | 8.2 | 19.93 | 52.07 |
NL Male | NL | Male | 37 | 12.0 | 13.48 | 60.52 |
NL Female | NL | Female | 36 | 14.0 | 8.56 | 63.44 |
NL Other | NL | Other | 31 | 7.2 | 16.89 | 45.11 |
= Verbinden van elementen van een grafiek met de Data
Aesthetic mapping
= de link tussen waarden voor een variabele in de Data en de 'geometry' (bv. hoogte van een balk; x-positie van een punt; kleur van punt; dikte van een punt; vorm van een punt)
Facet mapping
= de link tussen waarden voor een variabele in de Data en de panelen die in een grafiek worden onderscheiden (bv. apart paneel per land)
Data is misschien wel tidy
, maar wil niet zeggen dat de data-input van een graphic al meteen de juiste waarden bevatten die dienen te worden weergegeven
Vaak impliciet achter bepaalde types van grafieken
Data dient te worden vertaald naar 'grafische eigenschappen' (= Scales)
Voorbeelden:
Implicatie is dat waarde moeten op een bepaalde wijze geïnterpreteerd worden: discrete; continuous; ...
Welke geometrische vormen zijn de basis van de grafische representatie?
Voorbeelden:
Hoeveel panelen worden weergegeven?
Hoe de panelen te definiëren?
ggplot2
?Leuke data (Bron: https://allisonhorst.github.io/palmerpenguins/articles/intro.html)
install.packages("palmerpenguins")library(palmerpenguins)data("penguins")
Artwork by @allison_horst
species | island | bill_length_mm | bill_depth_mm | flipper_length_mm | body_mass_g | sex | year |
---|---|---|---|---|---|---|---|
Gentoo | Biscoe | 47.4 | 14.6 | 212 | 4725 | female | 2009 |
Adelie | Torgersen | 35.1 | 19.4 | 193 | 4200 | male | 2008 |
Adelie | Dream | 40.2 | 17.1 | 193 | 3400 | female | 2009 |
Gentoo | Biscoe | 45.3 | 13.7 | 210 | 4300 | female | 2008 |
Adelie | Biscoe | 39.7 | 17.7 | 193 | 3200 | female | 2009 |
Adelie | Biscoe | 38.2 | 18.1 | 185 | 3950 | male | 2007 |
Adelie | Dream | 40.2 | 20.1 | 200 | 3975 | male | 2009 |
Adelie | Biscoe | 39.0 | 17.5 | 186 | 3550 | female | 2008 |
Adelie | Torgersen | 38.6 | 21.2 | 191 | 3800 | male | 2007 |
Adelie | Torgersen | 36.2 | 17.2 | 187 | 3150 | female | 2009 |
ggplot2
Plot <- ggplot( ## Stap 1: de Data data = penguins, ## Stap 2: Mapping aes( x = flipper_length_mm, y = body_mass_g))Plot
ggplot2
Plot <- ggplot( ## Stap 1: de Data data = penguins, ## Stap 2: Mapping aes( x = flipper_length_mm, y = body_mass_g)) + ## Stap 3: Geometries toevoegen geom_point()Plot
Merk op dat we enkel stappen van de Grammar of Graphics niet dienden te definiëren omdat ze allen logische default waarden hebben
ggplot2
met meerdere facetsPlot <- ggplot( ## Stap 1: de Data data = penguins, ## Stap 2: Mapping aes( x = flipper_length_mm, y = body_mass_g)) + ## Stap 3: Geometries toevoegen geom_point() + ## Stap 4: Facets definiëren facet_wrap(.~species)Plot
geom_*
optiesDe cheatsheet: https://github.com/rstudio/cheatsheets/blob/main/data-visualization-2.1.pdf
ggplot2
"de bar is open"
geom_bar()
species
op de x-as zettengeom_bar()
stat_count()
)ggplot(penguins, aes( x = species )) + geom_bar()
geom_col()
geom_col()
hanteren.Teldata <- penguins %>% count(species, name = 'Aantal')ggplot(Teldata, aes( x = species, y = Aantal )) + geom_col()
## # A tibble: 3 × 2## species Aantal## <fct> <int>## 1 Adelie 152## 2 Chinstrap 68## 3 Gentoo 124
geom_bar()
fill
ggplot(penguins, aes( x = species )) + geom_bar( ## Extra mapping: de "fill" schaal aes(fill = species) )
geom_bar()
scale_fill_manual()
ggplot(penguins, aes( x = species )) + geom_bar( aes(fill = species) ) + # Zelf kleuren kiezen scale_fill_manual( values = c("darkorange","purple","cyan4") )
geom_bar()
labs()
ggplot(penguins, aes( x = species )) + geom_bar( aes(fill = species) ) + scale_fill_manual( values = c("darkorange","purple","cyan4") ) + # Labs laag voor titels en x-as label labs( title = "Palmer penguins", subtitle = "n observations for species", x = "" )
geom_bar()
theme_minimal()
ggplot(penguins, aes( x = species )) + geom_bar( aes(fill = species) ) + scale_fill_manual( values = c("darkorange","purple","cyan4") ) + labs( title = "Palmer penguins", subtitle = "n observations for species", x = "" ) + # Ander thema kiezen theme_minimal()
geom_bar()
coord_flip()
theme(legend.position = "none")
ggplot(penguins, aes( x = species )) + geom_bar( aes(fill = species) ) + scale_fill_manual( values = c("darkorange","purple","cyan4") ) + labs( title = "Palmer penguins", subtitle = "n observations for species", x = "" ) + coord_flip( ) + theme_minimal( ) + theme( legend.position = "none" )
[ggplot2]
: deel 1Op Dropbox vind je een document Oefening_ggplot2.Rmd
Plaats dit document op je pc
Open vervolgens het bestand in R Studio
Het document bevat een set van opdrachten met telkens lege code blokken
Bedoeling is dat je de juiste code schrijft (en test door te laten lopen) om deze opdrachten uit te voeren
Zit je vast? No Worries!
Oefening_ggplot2_oplossing.Rmd
ggplot2
geom_histogram()
ggplot(penguins, aes( x = flipper_length_mm, )) + geom_histogram()
geom_histogram()
ggplot(penguins, aes( x = flipper_length_mm, fill = species )) + geom_histogram( alpha = .7 ) + scale_fill_manual( values = c("darkorange","purple","cyan4") ) + labs( title = "Palmer penguins", subtitle = "Histogram voor flipper lengte", x = "Flipper lengte" ) + theme_minimal()
geom_density()
ggplot(penguins, aes( x = flipper_length_mm, fill = species )) + geom_density( alpha = .7 ) + scale_fill_manual( values = c("darkorange","purple","cyan4") ) + labs( title = "Palmer penguins", subtitle = "Density plot voor flipper lengte", x = "Flipper lengte" ) + theme_minimal()
geom_violin()
+ geom_jitter()
ggplot(penguins, aes( x = species, y = flipper_length_mm, fill = species, color = species )) + geom_violin( alpha = .65 ) + geom_jitter( alpha = .7 ) + scale_fill_manual( values = c("darkorange","purple","cyan4") ) + scale_color_manual( values = c("darkorange","purple","cyan4") ) + labs( title = "Palmer penguins", subtitle = "Density plot voor flipper lengte", y = "Flipper lengte", x = "", ) + theme_minimal() + theme(legend.position = "none")
Gebaseerd op de tutorial van Cédric Scherer: https://www.cedricscherer.com/
Extra pakket nodig: ggdist
library(ggdist)ggplot(penguins, aes(x = species, y = flipper_length_mm)) + stat_halfeye( adjust = .5, width = .6, .width = 0, justification = -.2, point_colour = NA ) + geom_boxplot( width = .15, outlier.shape = NA ) + geom_point( size = 1.3, alpha = .3, position = position_jitter( seed = 1, width = .1 )) + labs( title = "Palmer penguins", subtitle = "Verdeling van flipper lengte per soort", x = "", y = "flipper lengte" ) + coord_cartesian(xlim = c(1.2, NA), clip = "off") + coord_flip() + theme_minimal()
[ggplot2]
: deel 2Op Dropbox vind je een document Oefening_ggplot2.Rmd
Plaats dit document op je pc
Open vervolgens het bestand in R Studio
Het document bevat een set van opdrachten met telkens lege code blokken
Bedoeling is dat je de juiste code schrijft (en test door te laten lopen) om deze opdrachten uit te voeren
Zit je vast? No Worries!
Oefening_ggplot2_oplossing.Rmd
ggplot2
geom_point()
ggplot(penguins, aes( x = body_mass_g, y = flipper_length_mm )) + geom_point( ) + labs( title = "Palmer penguins", subtitle = "Samenhang tussen flipper lengte en body mass", y = "Flipper lengte", x = "Body mass", ) + theme_minimal() + theme(legend.position = "none")
geom_point()
en geom_smooth()
ggplot(penguins, aes( x = body_mass_g, y = flipper_length_mm )) + geom_point( ) + geom_smooth( ) + labs( title = "Palmer penguins", subtitle = "Samenhang tussen flipper lengte en body mass", y = "Flipper lengte", x = "Body mass", ) + theme_minimal() + theme(legend.position = "none")
geom_point()
en geom_smooth()
ggplot(penguins, aes( x = body_mass_g, y = flipper_length_mm )) + geom_point( ) + geom_smooth( method = "lm", se = FALSE ) + labs( title = "Palmer penguins", subtitle = "Samenhang tussen flipper lengte en body mass", y = "Flipper lengte", x = "Body mass", ) + theme_minimal() + theme(legend.position = "none")
geom_point()
en geom_smooth()
facet_wrap()
ggplot(penguins, aes( x = body_mass_g, y = flipper_length_mm )) + geom_point( ) + geom_smooth( method = "lm", se = FALSE ) + facet_wrap(.~species) + labs( title = "Palmer penguins", subtitle = "Samenhang tussen flipper lengte en body mass", y = "Flipper lengte", x = "Body mass", ) + theme_minimal() + theme(legend.position = "none")
geom_point()
en geom_smooth()
ggplot(data = penguins, aes(x = flipper_length_mm, y = body_mass_g)) + geom_point(aes(color = species, shape = species), size = 3, alpha = 0.8) + geom_smooth( aes(color = species), se = F, method = "lm" ) + theme_minimal() + scale_color_manual( values = c("darkorange","purple","cyan4")) + labs(title = "Penguin size, Palmer Station LTER", subtitle = "Flipper lengte en body mass voor Adelie, Chinstrap en Gentoo Pinguïns", x = "Flipper lengte (mm)", y = "Body mass (g)", color = "Penguin soort", shape = "Penguin soort") + theme(legend.position = c(0.2, 0.7), legend.background = element_rect(fill = "white", color = NA), plot.title.position = "plot", plot.caption = element_text(hjust = 0, face= "italic"), plot.caption.position = "plot")
[ggplot2]
: deel 3-- Op Dropbox vind je een document Oefening_ggplot2.Rmd
Plaats dit document op je pc
Open vervolgens het bestand in R Studio
Het document bevat een set van opdrachten met telkens lege code blokken
Bedoeling is dat je de juiste code schrijft (en test door te laten lopen) om deze opdrachten uit te voeren
Zit je vast? No Worries!
Oefening_ggplot2_oplossing.Rmd
library(ggdist)P1 <- ggplot(penguins, aes(x = species, y = flipper_length_mm)) + stat_halfeye( ) P1
P1 <- ggplot(penguins, aes(x = species, y = flipper_length_mm)) + stat_halfeye( adjust = .5, width = .6, .width = 0, justification = -.2, point_colour = NA ) P1
P2 <- P1 + geom_boxplot( width = .15, outlier.shape = NA ) P2
P3 <- P2 + geom_point( size = 1.3, alpha = .3, position = position_jitter( seed = 1, width = .1 )) P3
P4 <- P3 + labs( title = "Palmer penguins", subtitle = "Verdeling van flipper lengte per soort", x = "", y = "flipper lengte" ) P4
P5 <- P4 + coord_cartesian(xlim = c(1.2, NA), clip = "off") + coord_flip() + theme_minimal() + theme(plot.title.position = "plot")P5
ggplot2
? --- (doorklikken)Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |