Advanced datavisualisation
Last updated on 2025-02-04 | Edit this page
Estimated time: 12 minutes
Overview
Questions
- How do you write a lesson using R Markdown and sandpaper?
Objectives
- Explain how to use markdown with the new lesson template
- Demonstrate how to include pieces of code, figures, and nested challenge blocks
Introduction
or rather, weird and wonderfull stuff found in ggplot2.
As almost everything else in the programming world - these notes have been “borrowed” from others.
https://github.com/teunbrand/ggplot_tricks - take a look, new stuff might have appeared.
https://erikgahner.dk/2022/tips-and-tricks-for-ggplot2/
https://www.epirhandbook.com/new_pages/ggplot_tips.html
Gør kun tingene en gang.
theme_set tillader os at sætte et bestemt tema for alle efterfølgende plot.
R
library(tidyverse)
OUTPUT
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
R
library(palmerpenguins)
R
theme_set(
theme_bw()
)
R
penguins %>%
ggplot(aes(body_mass_g, flipper_length_mm)) +
geom_point()
WARNING
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_point()`).

Den der aes() funktion - hvad gør den egentlig?
R
my_mapping <- aes(x = wt, y = mpg)
my_mapping
OUTPUT
Aesthetic mapping:
* `x` -> `wt`
* `y` -> `mpg`
Det giver jo fin mening - x i plottet skal mappes til “wt”, og y til “mpt”.
Hvad ellers?
R
class(my_mapping)
OUTPUT
[1] "uneval"
uneval? wtf?! Nærlæser man, finder man ud af at det er en klasse der bruges til at gemme udtryk der ikke er evaluerede, men som skal evalueres i en bestemt kontekst.
R
str(my_mapping)
OUTPUT
List of 2
$ x: language ~wt
..- attr(*, ".Environment")=<environment: R_GlobalEnv>
$ y: language ~mpg
..- attr(*, ".Environment")=<environment: R_GlobalEnv>
- attr(*, "class")= chr "uneval"
Ikke overraskende er det en liste. Det er det ofte.
det kan man godt dykke dybere ned i.
Nå. Men my_mapping er altså en samling af uevaluerede udtryk, samlet i en liste.
Ønsker vi at pille dem ud, kan vi “splice” dem.
det kan vi dog kun i bestemte kontekster. den interessante er aes:
R
aes(!!!my_mapping)
OUTPUT
Aesthetic mapping:
* `x` -> `wt`
* `y` -> `mpg`
Det gør det muligt at sætte flere sammen:
R
my_other_mapping <- aes(color = am)
R
aes(!!!my_mapping, !!!my_other_mapping)
OUTPUT
Aesthetic mapping:
* `x` -> `wt`
* `y` -> `mpg`
* `colour` -> `am`
R
mtcars %>% ggplot(aes(!!!my_mapping)) + geom_point()

Det tillader os at sætte forskellige mappings sammen:
R
my_other_mapping <- aes(colour = qux)
aes(!!!my_mapping, !!!my_other_mapping)
OUTPUT
Aesthetic mapping:
* `x` -> `wt`
* `y` -> `mpg`
* `colour` -> `qux`
Og hvad kan man bruge det til?
Her er et eksempel, der bruger et andet trick:
my_fill <- aes(fill = after_scale(alpha(colour, 0.3)))
ggplot(mpg, aes(displ, hwy)) + geom_point(aes(colour = factor(cyl), !!!my_fill), shape = 21)
after_scale() giver forsinket evaluering. her evalueres det efter der er kørt en scalering på factoren. Og som sætter fill til den farve som geom_point har valgt for os - med en justering af alpha. Det ser neat ud!
Key Points
- Use
.md
files for episodes when you want static content - Use
.Rmd
files for episodes when you need to generate output - Run
sandpaper::check_lesson()
to identify any issues with your lesson - Run
sandpaper::build_lesson()
to preview your lesson locally