Til at justere tema og layout findes funktionen theme(), som har en lang række argumenter, der kan angives for at påvirke stort set alle aspekter af layout og tema. Der findes desuden færdige temaer, som eksempelvis theme_bw(), der giver grafen en bestemt stil. At bruge et færdigt tema (eksempelvis theme_bw()) betyder som regel, at færre justeringer skal foretages manuelt.
Det er ikke nødvendigt at justere temaet, når man udforsker data. Det bør derimod gøres ved præsentation for at optimere det endelige resultat. De fleste fagfolk arbejder med et fåtal forskellige typer visualiseringer, og derfor kan det med fordel betale sig at investere tid i at udvikle passende temaer.
I dette kapitel arbejder vi med data fra gapminder, som findes i pakken med samme navn. Indlæs gapminder med følgende kode:
library(gapminder)
## Inspicér de første 5 rækker
head(gapminder)| country <fctr> | continent <fctr> | year <int> | lifeExp <dbl> | pop <int> | gdpPercap <dbl> |
|---|---|---|---|---|---|
| Afghanistan | Asia | 1952 | 28.801 | 8425333 | 779.4453 |
| Afghanistan | Asia | 1957 | 30.332 | 9240934 | 820.8530 |
| Afghanistan | Asia | 1962 | 31.997 | 10267083 | 853.1007 |
| Afghanistan | Asia | 1967 | 34.020 | 11537966 | 836.1971 |
| Afghanistan | Asia | 1972 | 36.088 | 13079460 | 739.9811 |
| Afghanistan | Asia | 1977 | 38.438 | 14880372 | 786.1134 |
Gapminder
Vi begynder med en graf uden nogen justeringer af temaet (bemærk, at vi logaritmerer pop og lifeExp, for at grafen bliver tydeligere):
ggplot(gapminder, aes(x=log(pop),
y=log(lifeExp))) +
geom_point(aes(color = continent)) +
geom_smooth()
Vi vil nu ændre dette tema ved at demonstrere 8 komplette temaer. For at skrive effektiv kode opretter vi derfor et objekt (base_plot), som indeholder ovenstående graf:
base_plot <- ggplot(gapminder, aes(x=log(pop),
y=log(lifeExp))) +
geom_point(aes(color = continent)) +
geom_smooth()Nu tilføjer vi temaer til base_plot. Vi tilføjer også en titel, så det fremgår af grafen, hvilket tema der er brugt (se nedenfor).
base_plot +
labs(title="Theme Background White (theme_bw)") +
theme_bw()
base_plot +
labs(title="Theme Classic (theme_classic)") +
theme_classic()
base_plot +
labs(title="Theme Minimal (theme_minimal)") +
theme_minimal()
base_plot +
labs(title="Theme Grey (theme_grey)") +
theme_minimal()
base_plot +
labs(title="Theme Linedraw (theme_linedraw)") +
theme_linedraw()
base_plot +
labs(title="Theme Dark (theme_dark)") +
theme_dark()
base_plot
labs(title="Theme Light (theme_light)") +
theme_light()
base_plot +
labs(title="Theme Void (theme_void)") +
theme_void()







Ggthemes
Pakken ggthemes (https://jrnold.github.io/ggthemes/) indeholder endnu flere komplette themes, scales og geoms til ggplot2. I ggthemes findes flere muligheder end i nogen anden eksisterende pakke. Desuden findes der muligheder, som er særligt udviklet til forskning, videnskabelig publikation, farveblindhed, specifikke tidsskrifter, applikationer osv. Installér pakken med følgende kommando:
install.packages("ggthemes")
library(ggthemes)Vi afprøver et færdigt tema udformet efter Wall Street Journal:
base_plot +
labs(title="Theme Wall Street Journal") +
theme_wsj()
Justér specifikke elementer
Alle ovenstående eksempler var færdige temaer, som ændrer mange elementer på én gang. Du kan ændre stort set alle elementer i temaet ved hjælp af theme(). Denne funktion tager et stort antal elementer, som har elementfunktioner. Eksempelvis bruges elementet title til at justere alle titlerne. Da titler er tekst, har de elementfunktionen element_text(). I element_text() kan vi eksempelvis ændre størrelsen og farven på titlerne med følgende kode:
title = element_text(size=12, color="purple")
I grafen ser det sådan ud:
base_plot +
theme(title = element_text(size=15, color="gold1"))
theme(
line,
rect,
text,
title,
aspect.ratio,
axis.title,
axis.title.x,
axis.title.x.top,
axis.title.x.bottom,
axis.title.y,
axis.title.y.left,
axis.title.y.right,
axis.text,
axis.text.x,
axis.text.x.top,
axis.text.x.bottom,
axis.text.y,
axis.text.y.left,
axis.text.y.right,
axis.ticks,
axis.ticks.x,
axis.ticks.x.top,
axis.ticks.x.bottom,
axis.ticks.y,
axis.ticks.y.left,
axis.ticks.y.right,
axis.ticks.length,
axis.ticks.length.x,
axis.ticks.length.x.top,
axis.ticks.length.x.bottom,
axis.ticks.length.y,
axis.ticks.length.y.left,
axis.ticks.length.y.right,
axis.line,
axis.line.x,
axis.line.x.top,
axis.line.x.bottom,
axis.line.y,
axis.line.y.left,
axis.line.y.right,
legend.background,
legend.margin,
legend.spacing,
legend.spacing.x,
legend.spacing.y,
legend.key,
legend.key.size,
legend.key.height,
legend.key.width,
legend.text,
legend.text.align,
legend.title,
legend.title.align,
legend.position,
legend.direction,
legend.justification,
legend.box,
legend.box.just,
legend.box.margin,
legend.box.background,
legend.box.spacing,
panel.background,
panel.border,
panel.spacing,
panel.spacing.x,
panel.spacing.y,
panel.grid,
panel.grid.major,
panel.grid.minor,
panel.grid.major.x,
panel.grid.major.y,
panel.grid.minor.x,
panel.grid.minor.y,
panel.ontop,
plot.background,
plot.title,
plot.title.position,
plot.subtitle,
plot.caption,
plot.caption.position,
plot.tag,
plot.tag.position,
plot.margin,
strip.background,
strip.background.x,
strip.background.y,
strip.clip,
strip.placement,
strip.text,
strip.text.x,
strip.text.y,
strip.switch.pad.grid,
strip.switch.pad.wrap,
)Elementfunktioner:

Nedenfor laver vi en figur med labels (labs()) for x, y og titel; nye skalaer for x og y; samt justering af en række theme()-elementer.
base_plot +
# Ændrer labels på x, y og titel
labs(x="Population",
y="Life expectancy (years)",
title="Life expectancy and population size") +
# Ændrer skalaen på x-aksen og y-aksen
scale_y_continuous(breaks=seq(3, 5, by=0.5),
limits=c(2, 5)) +
scale_x_continuous(breaks=seq(10, 20, by=1),
limits=c(10, 20)) +
# Justerer temaet
theme(legend.text = element_text(color="brown4"),
legend.title = element_blank(),
legend.key = element_blank(),
panel.grid.major.x=element_line(color = "lightgoldenrod3",
size = 0.5,
linetype = 2),
panel.grid.minor.x=element_line(color = "palevioletred3",
size = 0.5,
linetype = 2),
plot.background = element_rect(fill="wheat3"))