-
Philipp Kleer authoredPhilipp Kleer authored
title: "Weiterführende Darstellungen in `ggplot2`"
output:
html_document:
toc: true
toc_float:
toc_collapsed: true
smooth_scroll: true
toc_depth: 3
widescreen: true
highlightStyle: github
highlightLines: true
highlightLanguage: ["r"]
css: ./styles/htmlbook.css
df_print: paged
mathjax: default
self_contained: false
incremental: false #True dann jedes Bullet einzeln
collapse: true # means the text output will be merged into the R source code block
includes:
after_body: ./styles/footer.html
before_body: ./styles/header.html
library("knitr")
library("rmarkdown")
library("tidyverse")
library("naniar")
library("UpSetR")
library("dotwhisker")
pss <- readRDS("../datasets/pss.rds")
uniMis <- readRDS("../datasets/uniMis.rds")
opts_chunk$set(#fig.path = 'pics/s6-', # path for calculated figures
fig.align = 'center', # alignment of figure (also possible right, left, default)
fig.show = 'hold', # how to show figures: hold -> direct at the end of code chunk; animate: all plots in an animation
fig.width = 6, # figure width
fig.height = 6, # figure height
echo = TRUE, # Code is printed
eval = FALSE, # Code is NOT evaluated
warning = FALSE, # warnings are NOT displayed
message = FALSE, # messages are NOT displayed
comment = "", # no hashtags before output
results = "markdown",
rows.print = 15
)
htmltools::tagList(
xaringanExtra::use_clipboard(
button_text = "<i class=\"fa fa-clipboard\"></i>",
success_text = "<i class=\"fa fa-check\" style=\"color: #90BE6D\"></i>",
error_text = "<i class=\"fa fa-times-circle\" style=\"color: #F94144\"></i>"
),
rmarkdown::html_dependency_font_awesome()
)
Start
In diesem Teil des Kurses werden weiterführende Einstellungen innerhalb des Pakets ggplot2
dargestellt. Aufbauend auf die Einführung in die Grammatik von ggplot
werden folgende Teile dargestellt:
-
Schriftarten bearbeiten bzw. Darstellung des Plots
-
Anmerkungen im Plot
-
missing values darstellen
-
Marginal Plots / Regressionsplots
-
Karten bearbeiten
Eine gute Übersicht bietet auch folgendes Online-Lernbuch (auf Englisch).
Weitere Layout-Fragen
Innerhalb eines ggplots
können nahezu alle dargestellten Teilbereiche verändert und angepasst werden. Einige dieser Änderungen werden wie im nachfolgenden besprechen.
Dazu schaffen wir uns zuerst nochmal ein ggplot-Objekt mit unserem Scatterplot aus der Einführung in ggplot
:
scatter <- ggplot(pss,
aes(stfeco,
stfdem
)
) +
geom_jitter(alpha = .2,
col = "blue"
) +
scale_x_continuous(breaks = seq(0,
10,
1
)
) +
scale_y_continuous(breaks = seq(0,
10,
1
)
)
scatter
Zuerst fügen wir nochmals Titel, Achsenbeschriftung und Quellen hinzu.
scatterLeg <- scatter +
labs(x = "Satisfaction with Economy",
y = "Satisfaction with Democracy",
title = "Correlation Plot",
caption = "Data: Panem Social Survey.\n Data jittered."
)
scatterLeg
Innerhalb der Funktion theme()
können wir Teilbereiche des Plots ansprechen und ändern. Dies umfasst u.a. folgende Eigenschaften des Plots:
plot.title
-
axis.title.x
/axis.title.y
-
axis.text.x
/axis.text.y
-
panel.grid
/panel.grid.minor
/panel.grid.major
-
plot.background
/panel.background
Eine komplette Übersicht aller Einstellungen die in theme()
genutzt werden können findet sich in der User-Dokumentation.
Wir werden jetzt nach und nach Veränderungen vornehmen. Zuerst werden wir die Schriftgröße, Position und das Erscheinungsbild des Titels ändern. Dies machen wir über plot.title
in theme()
. Dazu verwenden wir die Funktion element_text()
:
scatterLeg +
theme(plot.title = element_text(size = 25,
face = "italic",
hjust = 0.5
)
)
Dazu haben wir die drei Argumente size
(Schriftgröße), face
(Erscheinungsbild) und hjust
(Position) genutzt.
Als nächstes wollen wir die Achsentitel bearbeiten.
scatterAxes <- scatterLeg +
theme(plot.title = element_text(size = 25,
face = "italic",
hjust = 0.5
),
axis.title.x = element_text(size = 16,
color = "seagreen",
hjust = 0
),
axis.title.y = element_text(size = 8,
color = rgb(0,
105,
179,
maxColorValue = 255
),
hjust = 1,
face = "bold"
)
)
scatterAxes
Anstatt eine Farbe anzugeben, kann man mit der Funktionrgb()
auch den Farbton bestimmen. Alternativ kann man auch den HTML-Code der Farbe innerhalb des Arguments color
nutzen.
scatterLeg +
theme(plot.title = element_text(size = 25,
face = "italic",
hjust = 0.5
),
axis.title.x = element_text(size = 16,
color = "seagreen",
hjust = 0
),
axis.title.y = element_text(size = 8,
color = "#0069B3",
hjust = 1,
face = "bold"
)
)
Nun möchten wir weiter experimentieren und die Achsenticks bearbeiten. Dazu nutzen wir axis.ticks.x
bzw. axis.ticks.y
.
scatterTicks <- scatterAxes +
theme(axis.text.x = element_text(size = 12,
angle = 45,
color = "darkgrey"
),
axis.text.y = element_text(size = 11,
hjust = 0,
vjust = 1
)
)
scatterTicks
Mit dem Argument angle
können wir die Achsenbeschriftungen drehen lassen. Mit hjust
und vjust
können wir die Startposition des Texts ändern.
Als nächstes möchten wir das Grid des Plots ändern, also die Linien. Dazu nutzen wir erstmal das Argument panel.grid
und innerhalb des Arguments die Funktion element_line()
scatterGrid <- scatterTicks +
theme(panel.grid = element_line(color = "green",
size = 1,
linetype = "solid" # blank, solid, dashed, dotted, dotdash, longdash, twodash
)
)
scatterGrid
Mit den Argumenten panel.grid.major
und panel.grid.minor
können die Haupt- und Hilfslinien getrennt bearbeitet werden. Wenn wir zum Beispiel nur die Hauptlinien wollen, machen wir folgendes:
scatterGrid <- scatterTicks +
theme(panel.grid.major = element_line(color = "green",
size = 1,
linetype = "solid" # blank, solid, dashed, dotted, dotdash, longdash, twodash
),
panel.grid.minor = element_blank()
)
scatterGrid
Man kann auch die Hilfslinien getrennt nach Achsen bearbeiten. Dazu muss man einfach jeweils .x
bzw. .y
beifügen.
Zuletzt kann man noch den Hintergrund des Plots bzw. des Panels ändern. Dies geschieht über die Argumente plot.background
bzw. panel.background
. Dazu nutzt man die Funktion element_rect()
innerhalb des Arguments
scatterGrid +
theme(plot.background = element_rect(color ="darkgray",
size = 2,
fill = "lightpink"
),
panel.background = element_rect(fill = "moccasin"
)
)
Es gibt ebenso eine ganze Reihe an vorgefertigten Themes, die dann wiederum individuell angepasst werden können. Eine Übersicht über vorhandene Themes gibt es hier.
Annotations
Neben den ganzen Spielereien möchte man manchmal auch einzelne Bereiche einer Grafik besonders hervorheben oder aber zum Beispiel Beschriftungen der Fälle hinzufügen (bei kleinem n).
Hierzu gibt es die Funktionen geom_text()
und annotate()
, die mit ggplot
genutzt werden können. Dazu nehmen wir wieder das Scatterplot vom Beginn, begrenzen aber diesmal die Anzahl auf 15, damit wir eine klare Darstellung bekommen. Wichtig: geom_jitter()
kann nicht genutzt werden, da die Datenbeschriftungen am Datenpunkt und nicht am gejitterten Datenpunkt auftauchen!
scatter2 <- ggplot(pss[1:15,],
aes(stfeco,
stfdem
)
) +
geom_point(col = "blue") +
scale_x_continuous(breaks = seq(0,
10,
1
)
) +
scale_y_continuous(breaks = seq(0,
10,
1
)
)
scatter2
Mit der Funktion geom_text()
kann man den Datenpunkten-Beschriftungen hinzufügen. So zum Beispiel die Zeilennummer oder die ID-Variable. Wir machen letzteres, da sich die Zeilennummer bei Sortierungen ändern kann und somit nicht eindeutig ist. Daher fügen wir jetzt mit der Funktion in aes
ein label
hinzu (idno
).
scatter2 +
geom_text(aes(label = idno))
Innerhalb von geom_text()
kann man nun weitere Einstellungen vornehmen. Ein paar davon kennen wir schon, zwei weitere wichtige sind nudge_y
und nudge_x
, die den Schriftstart auf der jeweiligen Achse verschieben.