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.
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.
scatter2 +
geom_text(
aes(label = idno),
size = 2,
nudge_y = -.15
)
Wenn man nun trotzdem alle Datenpunkte abbilden möchte und nur spezifische Datenpunkte hervorheben möchte, ist dies ganz leicht möglich: Wir möchten nur die ersten zehn Fälle anzeigen und begrenzen daher die Daten in geom_text()
. Dies ist auch über subset()
mit mehreren Verknüpfungen möglich.
ggplot(
pss,
aes(
stfeco,
stfdem
)
) +
geom_point(
alpha = .2,
col = "blue"
) +
scale_x_continuous(
breaks = seq(
0,
10,
1
)
) +
scale_y_continuous(
breaks = seq(
0,
10,
1
)
) +
geom_text(
aes(label = idno),
data = pss[1:10,]
)
## Warning: Removed 96 rows containing missing values or values outside the scale range
## (`geom_point()`).
Weitaus größere Möglichkeiten bietet annotate()
. Mit dieser können nicht nur Beschriftungen, sondern auch bestimmte Bereiche innerhalb eines Plots hervorgehoben werden. Nehmen wir wieder das gejitterte Plot und markieren einen bestimmten Bereich im Plot:
scatter2 +
annotate(
"rect",
xmin = 6.5, # this corresponds to the axis scale!
xmax = 8.5,
ymin = 7.5,
ymax = 10.5,
colour = "darkgreen",
fill = "lightgreen"
)
Der Nachteil wird direkt ersichtlich! Da ggplot
über Layer angesprochen wird, muss der annotate()
-Layer vor dem geom_jitter()
-Layer stehen. Oder wir fügen alpha
hinzu, um die Sichtbarkeit zu verändrn:
scatter2 +
annotate(
"rect",
xmin = 6.5,
xmax = 8.5,
ymin = 7.5,
ymax = 10.5,
colour = "darkgreen",
fill = "lightgreen",
alpha = .1
)
Jetzt möchten wir in der Grafik noch eine Beschriftung hinzufügen, damit der Leser:in klar wird, welchen Bereich wir hier markiert haben:
scatter2 +
annotate(
"rect",
xmin = 6.5,
xmax = 8.5,
ymin = 7.5,
ymax = 10.5,
colour = "darkgreen",
fill = "lightgreen",
alpha = .1
) +
annotate(
"text",
x = 4,
y = 9,
label = "highlighted area", # with \n you get a new line
colour = "darkgreen"
)
Als weitere Möglichkeit bietet annotate()
die Möglichkeit Linien zu erstellen, so dass wir unseren Text auf das Feld zeigen lassen können:
scatter2 +
annotate(
"rect",
xmin = 6.5,
xmax = 8.5,
ymin = 7.5,
ymax = 10.5,
colour = "darkgreen",
fill = "lightgreen",
alpha = .1
) +
annotate(
"text",
x = 4,
y = 9,
label = "highlighted area", # with \n you get a new line
color = "darkgreen"
) +
annotate(
"segment",
x = 4.6,
xend = 6.5,
y = 9,
yend = 9,
color = "darkgreen",
arrow = arrow()
)
Im letzten Schritt lernst du noch die Darstellung von missing values kennen!