Advanced datavisualisation
Last updated on 2025-02-04 | Edit this page
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 errorsR
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 .mdfiles for episodes when you want static content
- Use .Rmdfiles 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