Zur Anpassung von Theme und Layout gibt es die Funktion theme(), die eine lange Reihe von Argumenten bietet, mit denen sich praktisch alle Aspekte von Layout und Theme beeinflussen lassen. Darüber hinaus gibt es fertige Themes, beispielsweise theme_bw(), die der Grafik einen bestimmten Stil verleihen. Wer ein fertiges Theme verwendet (zum Beispiel theme_bw()), muss in der Regel weniger Anpassungen manuell vornehmen.
Für die explorative Datenanalyse ist es nicht notwendig, das Theme anzupassen. Für die Präsentation sollte dies jedoch geschehen, um das Endergebnis zu optimieren. Die meisten Anwender arbeiten mit einigen wenigen Arten von Visualisierungen, weshalb es sich lohnt, Zeit in die Entwicklung passender Themes zu investieren.
In diesem Kapitel arbeiten wir mit Daten aus gapminder, die im gleichnamigen Package enthalten sind. Laden Sie gapminder mit folgendem Code:
library(gapminder)
## Die ersten 5 Zeilen inspizieren
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
Wir beginnen mit einer Grafik ohne jegliche Anpassung des Themes (beachten Sie, dass wir pop und lifeExp logarithmieren, damit die Grafik übersichtlicher wird):
ggplot(gapminder, aes(x=log(pop),
y=log(lifeExp))) +
geom_point(aes(color = continent)) +
geom_smooth()
Wir modifizieren nun dieses Theme, indem wir 8 vollständige Themes vorstellen. Um effizienten Code zu schreiben, erstellen wir deshalb ein Objekt (base_plot), das die obige Grafik enthält:
base_plot <- ggplot(gapminder, aes(x=log(pop),
y=log(lifeExp))) +
geom_point(aes(color = continent)) +
geom_smooth()Nun fügen wir base_plot Themes hinzu. Außerdem ergänzen wir einen Titel, damit in der Grafik ersichtlich ist, welches Theme verwendet wurde (siehe unten).
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
Das Package ggthemes (https://jrnold.github.io/ggthemes/) enthält noch mehr vollständige themes, scales und geoms für ggplot2. In ggthemes gibt es mehr Optionen als in jedem anderen existierenden Package. Zudem gibt es Optionen, die speziell für Forschung, wissenschaftliche Publikationen, Farbenblindheit, bestimmte Fachzeitschriften, Anwendungen usw. entwickelt wurden. Installieren Sie das Package mit folgendem Befehl:
install.packages("ggthemes")
library(ggthemes)Wir probieren ein fertiges Theme aus, das dem Wall Street Journal nachempfunden ist:
base_plot +
labs(title="Theme Wall Street Journal") +
theme_wsj()
Bestimmte Elemente anpassen
Bei allen obigen Beispielen handelte es sich um fertige Themes, die viele Elemente gleichzeitig verändern. Mit theme() können Sie praktisch sämtliche Elemente des Themes modifizieren. Diese Funktion nimmt eine große Zahl von Elementen entgegen, die Elementfunktionen besitzen. Beispielsweise wird das Element title verwendet, um alle Titel anzupassen. Da Titel Text sind, haben sie die Elementfunktion element_text(). In element_text() können wir zum Beispiel Größe und Farbe der Titel mit folgendem Code ändern:
title = element_text(size=12, color="purple")
In der Grafik sieht das folgendermaßen aus:
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,
)Elementfunktionen:

Im Folgenden erstellen wir eine Abbildung mit Beschriftungen (labs()) für x, y und titel, neuen Skalen für x und y sowie der Anpassung einiger theme()-Elemente.
base_plot +
# Ändert die Beschriftungen von x, y und Titel
labs(x="Population",
y="Life expectancy (years)",
title="Life expectancy and population size") +
# Ändert die Skala der x-Achse und der y-Achse
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)) +
# Passt das Theme an
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"))