For å justere tema og layout finnes funksjonen theme(), som har en lang rekke argumenter som kan spesifiseres for å påvirke i prinsippet alle aspekter ved layout og tema. Det finnes dessuten ferdige temaer, som for eksempel theme_bw(), som gir grafen en bestemt stil. Å bruke et ferdig tema (for eksempel theme_bw()) innebærer som regel at færre justeringer må gjøres manuelt.
Det er ikke nødvendig å justere temaet når man utforsker data. Det bør derimot gjøres ved presentasjon for å optimalisere det endelige resultatet. De fleste yrkesutøvere arbeider med et fåtall ulike typer visualiseringer, og derfor kan det lønne seg å investere tid i å utvikle passende temaer.
I dette kapittelet arbeider vi med data fra gapminder, som finnes i pakken med samme navn. Last inn gapminder med følgende kode:
library(gapminder)
## Inspiser de første 5 radene
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 begynner med en graf uten noen justeringer av temaet (merk at vi logaritmerer pop og lifeExp fordi grafen da blir tydeligere):
ggplot(gapminder, aes(x=log(pop),
y=log(lifeExp))) +
geom_point(aes(color = continent)) +
geom_smooth()
Vi skal nå modifisere dette temaet ved å demonstrere 8 komplette temaer. For å skrive effektiv kode skal vi derfor lage et objekt (base_plot) som inneholder grafen ovenfor:
base_plot <- ggplot(gapminder, aes(x=log(pop),
y=log(lifeExp))) +
geom_point(aes(color = continent)) +
geom_smooth()Nå legger vi temaer til base_plot. Vi legger også til en tittel, slik at det fremgår av grafen hvilket tema som er brukt (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/) inneholder enda flere komplette themes, scales og geoms for ggplot2. I ggthemes finnes flere alternativer enn i noen annen eksisterende pakke. Videre finnes alternativer som er spesielt utviklet for forskning, vitenskapelig publisering, fargeblindhet, bestemte tidsskrifter, applikasjoner osv. Installer pakken med følgende kommando:
install.packages("ggthemes")
library(ggthemes)Vi prøver et ferdig tema laget etter Wall Street Journal:
base_plot +
labs(title="Theme Wall Street Journal") +
theme_wsj()
Justere spesifikke elementer
Alle eksemplene ovenfor var ferdige temaer som modifiserer mange elementer samtidig. Du kan modifisere i prinsippet alle elementer i temaet ved hjelp av theme(). Denne funksjonen tar et stort antall elementer som har elementfunksjoner. For eksempel brukes elementet title til å justere alle titlene. Fordi titler er tekst, har de elementfunksjonen element_text(). I element_text() kan vi for eksempel endre størrelsen og fargen på titlene med følgende kode:
title = element_text(size=12, color="purple")
I grafen blir det slik:
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,
)Elementfunksjoner:

Nedenfor lager vi en figur med labels (labs()) for x, y og titel; nye skalaer for x og y; samt justering av en rekke theme()-elementer.
base_plot +
# Endrer labels på x, y og tittel
labs(x="Population",
y="Life expectancy (years)",
title="Life expectancy and population size") +
# Endrer 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"))