10 Pretty Plots
Laden Sie die folgenden Packages und Data Frames:
library(tidyverse)
library(magrittr)
library(gridExtra)
url <- "http://www.phonetik.uni-muenchen.de/~jmh/lehre/Rdf"
asp <- read.table(file.path(url, "asp.txt")) %>% as_tibble()
coronal <- read.table(file.path(url, "coronal.txt")) %>% as_tibble()
vdata <- read.table(file.path(url, "vdata.txt")) %>% as_tibble()
int <- read.table(file.path(url, "intdauer.txt")) %>% as_tibble()
ggplot2
bietet Ihnen vielfältige Möglichkeiten, Ihre Abbildungen zu verschönern und zu individualisieren. Hier stellen wir Ihnen die wichtigsten Spezifikationen vor.
10.1 Achsenbeschriftungen
Die Beschriftungen der Achsen wird mit xlab()
bzw. ylab()
erstellt. Einen Titel können Sie mit ggtitle()
hinzufügen:
ggplot(asp) +
aes(x = Kons, y = d) +
geom_boxplot() +
xlab("Artikulationsstelle") +
ylab("Dauer (ms)") +
ggtitle("Boxplot-Daten")
Ansonsten können Sie auch labs()
nutzen für alle Labels zusammen:
10.2 Koordinatensystem begrenzen
Um den sichtbaren Bereich eines Plots zu begrenzen oder zu erweitern, können Sie die folgenden Funktionen verwenden. Diese haben jedoch unterschiedliche “Nebenwirkungen” (s. auch hier):
xlim()
und/oderylim()
bzw.scale_x_continuous(limits = c())
und/oderscale_y_continuous(limits = c())
: Eliminiert Datenpunkte beim Heranzoomen und wirft eine Warnmeldung. Dies beeinflusst ggf. Regressionslinien und andere überlagerte Abbildungskomponenten.coord_cartesian(xlim = c(), ylim = c())
: Blendet die Datenpunkte nur aus und wirft daher keine Warnmeldung. Dies beeinflusst Regressionslinien und andere überlagerte Abbildungskomponenten nicht.
# mit coord_cartesian()
ggplot(int) +
aes(x = dB, y = Dauer) +
geom_point() +
coord_cartesian(xlim = c(10,40),
ylim = c(30,280))
# mit xlim() und ylim()
ggplot(int) +
aes(x = dB, y = Dauer) +
geom_point() +
xlim(10, 40) +
ylim(30, 280)
## Warning: Removed 2 rows containing missing values or values
## outside the scale range (`geom_point()`).
10.3 Farben
ggplot2
verwendet standardmäßig immer dieselbe Farbpalette. Ihnen stehen aber deutlich mehr Farben zur Verfügung, wie Ihnen diese Farbauswahl zeigt. Die Farbnamen bekommen Sie auch mit:
## [1] "white" "aliceblue" "antiquewhite"
## [4] "antiquewhite1" "antiquewhite2" "antiquewhite3"
## [7] "antiquewhite4" "aquamarine" "aquamarine1"
## [10] "aquamarine2"
Ihre Farbauswahl teilen Sie mit den Argumenten col
(Umriss- bzw. Linienfarbe) bzw. fill
(Füllfarbe) im aesthetic mapping mit. Wenn wir die Variable Kons
in folgendem Boxplot farb-kodieren wollen, sieht das so aus:
# mit "fill" (empfohlen für Boxplots!)
ggplot(asp) +
aes(x = Kons, y = d, fill = Kons) +
geom_boxplot()
Wie Sie sehen, wurde diesen zwei Plots automatisch eine Legende hinzugefügt, die aufschlüsselt, welche Farben für welche Werte der Variable Kons
verwendet wurden. Jetzt wollen wir unsere Farben selbst auswählen:
# "fill" mit eigenen Farben
farben <- c("darkgoldenrod1", "navy")
ggplot(asp) +
aes(y = d, x = Kons, fill = Kons) +
geom_boxplot(fill = farben)
Hier gibt es keine Legende. Wenn wir bei selbst gewählten Farben eine Legende haben wollen, benutzen wir eine Funktion namens scale_color_manual()
bzw. scale_fill_manual()
:
# "fill" mit eigenen Farben
farben <- c("darkgoldenrod1", "navy")
ggplot(asp) +
aes(y = d, x = Kons, fill = Kons) +
geom_boxplot() +
scale_fill_manual(values = farben)
# dasselbe für den Barplot
ggplot(coronal) +
aes(x = Region, fill = Fr) +
geom_bar() +
scale_fill_manual(values = farben)
Für Boxplots gibt es übrigens die Möglichkeit, die Outlier unabhängig von der Box zu gestalten:
10.4 Weitere Spezifikationen
Es gibt natürlich noch deutlich mehr Spezifikationen für die einzelnen Abbildungstypen als die Farbe, z.B. die Zeichengröße, den Linientyp, die Punktform, die Schriftart…
col
: Umriss- bzw. Linienfarbefill
: Füllfarbeshape
: Formsize
: Größelinewidth
: Liniendickelty
: Linientypstroke
: Dicke für Text
Dazu gibt es eine Vignette:
Einige dieser Spezifikationen wenden wir hier an:
ggplot(int) +
aes(x = dB, y = Dauer) +
geom_point(col = "purple",
size = 3,
shape = 0) +
geom_line(col = "orange",
size = 1.5,
lty = "twodash")
## Warning: Using `size` aesthetic for lines was deprecated in
## ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see
## where this warning was generated.
Sie sollten sich aber natürlich immer sorgfältig überlegen, ob eine Spezifikation notwendig ist, um die Abbildung klarer zu gestalten.
10.5 Schriftzeichengröße
Die Default-Schriftzeichengröße der Achsenbeschriftung und Titel ist 11pt oder kleiner. Vor allem wenn Sie Ihre Plots präsentieren, ist es SEHR wichtig, dass Sie die Schriftzeichengröße verändern. Wir empfehlen mind. 16-24pt. Hierfür müssen wir das theme()
ändern.
ggplot(asp) +
aes(x = Kons, y = d) +
geom_boxplot() +
xlab("Artikulationsstelle") +
ylab("Dauer (ms)") +
ggtitle("Boxplot-Daten") +
theme(text = element_text(size = 24), # Beschriftungen & Titel
axis.text = element_text(size = 18)) # Achsenbeschriftungen
Weiterführende Infos: theme()
Das theme()
ist z.B. für die Hintergrundfarbe der Plots, die Achsen, und vieles weitere zuständig. Diese Übersicht an Argumenten der Funktion theme()
zeigt Ihnen, wie viel Sie damit einstellen können.
10.6 Plots unterteilen und anordnen
10.6.1 Plots unterteilen
ggplot2
bietet zwei Möglichkeiten, einen Plot in mehrere zu unterteilen: facet_wrap()
und facet_grid()
. Hauptargument dieser Funktionen ist/sind die üblicherweise kategoriale(n) Variable(n), deren Werte in getrennten Panels dargestellt werden sollen. Zum Beispiel können wir die Datenpunkte, die mit unterschiedlichen Phonemen assoziiert sind, in getrennten Panels darstellen.
Die Formeln, um die Variablen anzugeben, sehen wie folgt aus:
.~Var1
bzw.~Var1
Var1~.
(Punkt muss da sein!)Var1~Var2
Var1+Var2~Var3
Var1~Var2+Var3
Es bietet sich nicht an, mehr als drei Variablen in facet_wrap()
oder facet_grid()
zu verwenden, da dies die Übersichtlichkeit des Plots deutlich einschränkt.
facet_wrap()
ordnet die Panels eines Plots in Reihen und Spalten an.
# aufteilen nach Versuchsperson
ggplot(vdata) +
aes(x = F1, y = F2) +
geom_point() +
facet_wrap(~Subj)
# aufteilen nach Versuchsperson und Gespanntheit
ggplot(vdata) +
aes(x = F1, y = F2) +
geom_point() +
facet_wrap(Subj~Tense)
facet_grid()
hingegen ordnet in Zeilen oder Spalten. Die Reihenfolge für die Formel ist facet_grid(Zeilen~Spalten)
# aufteilen nach Versuchsperson in Zeilen
ggplot(vdata) +
aes(x = F1, y = F2) +
geom_point() +
facet_grid(Subj~.)
10.6.2 Plots anordnen
Des Weiteren gibt es die Möglichkeit, mehrere Plots neben- oder untereinander anzuordnen. Hierfür verwenden wir die Funktion grid.arrange()
die oben geladene Library gridExtra
.