Weitere Geoms und Aufbereiten von Plots

Lukas Arnold
Simone Arnold
Florian Bagemihl
Matthias Baitsch
Marc Fehr
Franca Hollmann
Maik Poetzsch
Sebastian Seipel

2026-03-19

1 Linienplots mit geom_line()

Minimalbeispiel geom_line()

d <- tibble(A = c(1, 2, 3, 5), B = c(2, 6, 4, 4.5))
ggplot(data = d) + geom_line(mapping = aes(x = A, y = B))
  • geom_line() funktioniert im Prinzip genau wie geom_point()

BIP Länder (erster Versuch)

ggplot(data = d_wb_countries) +
  geom_line(mapping = aes(x = year, y = gdp))
  • Nicht klar, dass nur Punkte derselben Länder verbunden werden sollen!

BIP Länder (zweiter Versuch)

ggplot(data = d_wb_countries) +
  geom_line(mapping = aes(x = year, y = gdp, group = country))
  • Mit group = <M> angegeben, welche Punkte zusammengehören

BIP Länder (mit Farbe)

ggplot(data = d_wb_countries) +
  geom_line(mapping = aes(x = year, y = gdp, color = country, group = country))
  • Einfärben mit color = c

BIP Länder: Farbe und Population

ggplot(data = d_wb_countries) +
  geom_line(mapping = aes(x = year, y = gdp, color = country, linewidth = pop), lineend = "round")
  • size = s legt Linienstärke fest
  • lineend = "round" bei sehr dicken Linien

2 Was es sonst nocht gibt…

Liniensegmente mit geom_segment()

ggplot(data = d_wb_countries_2012) +
  geom_segment(mapping = aes(x = 0, xend = pop, y = country, yend = country)) +
  geom_point(mapping = aes(x = pop, y = country), color = "red")
  • Notwendige AES: x, y, xend, yend, auch mit festen Werten

Liniensegmente mit geom_segment()

ggplot(data = d_wb_countries_2012) +
  geom_segment(mapping = aes(x = 0, xend = pop, y = country)) +
  geom_point(mapping = aes(x = pop, y = country), color = "red")
  • Wert für Ende kann man weglassen, falls gleich wie Anfang

Rechtecke mit geom_tile()

d <- tibble(X = c(0, 1, 3), Y = c(3, 2, 1), W = c(1, 0.5, 1), H = c(2, 3, 1))
ggplot(data = d) +
  geom_tile(mapping = aes(x = X, y = Y, width = W, height = H)) +
  geom_point(mapping = aes(x = X, y = Y), color = "red")
  • Notwendige AES: Mittelpunkt und Breite/Höhe
  • tile wie Fliese

Rechtecke mit geom_rect()

d <- tibble(X1 = c(0, 1.5, 3), Y1 = c(2.5, 2, 1), X2 = c(1, 2.5, 3.5), Y2 = c(1, 3, 2))
ggplot(data = d) +
  geom_rect(mapping = aes(xmin = X1, ymin = Y1, xmax = X2, ymax = Y2)) +
  geom_point(mapping = aes(x = X1, y = Y1), color = "red") + geom_point(mapping = aes(x = X2, y = Y2), color = "blue")
  • Notwendige AES: Koordinaten der Eckpunkte
  • rect wie rectangle = Rechteck

3 Plots aufbereiten

Facetten mit facet_wrap

ggplot(data = filter(d_ns_bochum_tag, Jahr %in% 2014:2017)) +
  geom_boxplot(mapping = aes(x = Monat, y = NS)) +
  facet_wrap(~Jahr, ncol = 2)
  • facet_wrap(~Merkmal): Für jede Ausprägung des Merkmals ein Plot
  • facet wie Facette, Seite und wrap wie umbrechen
  • Anzahl Zeilen (row) oder Spalten (col) mit nrow = nr oder ncol = nc
  • Jahre 2014 - 2017 mit filter() (später ausführlich)

Sortierung nach Häufigkeit 1/3

ggplot(d_wb_all) +
  geom_bar(mapping = aes(x = region))
  • Standardmäßig wird alphabetisch sortiert

Sortierung nach Häufigkeit 2/3

ggplot(d_wb_all) +
  geom_bar(mapping = aes(x = fct_infreq(region)))
  • Nach Häufigkeit sortieren mit fct_infreq()

Sortierung nach Häufigkeit 3/3

ggplot(d_wb_all) +
  geom_bar(mapping = aes(x = fct_rev(fct_infreq(region))))
  • Ansteigend mit fct_rev(), rev wie reverse = umgekehrt

Sortierung nach Merkmal 1/3

ggplot(d_wb_countries) +
  geom_col(mapping = aes(x = country, y = pop))
  • Standardmäßig wird alphabetisch sortiert

Sortierung nach Merkmal 2/3

ggplot(d_wb_countries) +
  geom_col(mapping = aes(x = fct_reorder(country, pop), y = pop))
  • Nach Merkmal sortieren mit fct_reorder()

Sortierung nach Merkmal 3/3

ggplot(d_wb_countries) +
  geom_col(mapping = aes(x = fct_rev(fct_reorder(country, pop)), y = pop))
  • Absteigend sortieren wieder mit fct_rev()

Skalen

Skalen regeln die Abbildung von Daten auf die Eigenschaften geometrischer Objekte (AES).

Form der Angaben zu Skalen: scale_AAA_BBB(<Arguments>)

AAA BBB Funktion
x, y continuous, discrete Koordinatenachsen konfigurieren
x, y reverse, sqrt, log10 Koordinatenachsen transformieren
color, fill grey, hue, manual, brewer, … Farbe und Füllfarbe ändern

Darüber hinaus gibt es Skalen für alle anderen visuellen Eigenschaften (Transparenz, Linientyp, Shape, …). In der Regel muss man diese aber nicht anpassen.

Skalen werden automatisch eingefügt

Werden keine Skalen angegeben (so wie bisher), dann fügt ggplot automatisch sinnvolle Skalen ein. Aus

ggplot(data = d_wb_all) +
  geom_point(mapping = aes(x = year, y = gdp))

wird daher

ggplot(data = d_wb_all) +
  geom_point(mapping = aes(x = year, y = gdp)) +
  scale_x_continuous() +
  scale_y_continuous()

Skalen anpassen: Selber dazuschreiben

Kontinuierliche Achsen: Achspunkte ändern

ggplot(data = d_wb_all) + geom_point(mapping = aes(x = year, y = gdp)) +
  scale_x_continuous(breaks = c(1965, 1990, 2015))
  • Änderung der Beschriftung mit breaks = b

Kontinuierliche Achsen: Möglichkeiten

Argument Beschreibung
breaks Vektor mit Werten für Achspunkte
minor_breaks Vektor mit Werten für zwischen-Achspunkte
limits Vektor mit zwei Elementen für Begrenzung
labels Vektor mit Beschriftung (selten)

  • Keine Punkte mit breaks = NULL bzw. minor_breaks = NULL
  • Durch limits werden die entsprechenden Daten vor dem Plotten entfernt (manchmal nicht erwünscht). Alternativ die Plotgrenzen bei coord_cartesian() angeben (gleich)

Diskrete Achsen: Beschriftung ändern

ggplot(data = d_wb_2012) + geom_bar(mapping = aes(x = region)) +
  scale_x_discrete(labels = c("A", "B", "C", "D", "E", "F", "G"))
  • Änderung der Beschriftung mit labels = l

Viele Werte nah am Ursprung

ggplot(data = d_wb_2012) +
  geom_point(mapping = aes(x = gdp, y = gge, fill = region, size = pop), shape = 21)
  • Problem: Fast alle Werte liegen sehr nahe bei Null

Viele Werte nah am Ursprung: Logarithmische Skala

ggplot(data = d_wb_2012) +
  geom_point(mapping = aes(x = gdp, y = gge, fill = region, size = pop), shape = 21) +
  scale_x_log10() + scale_y_log10()
  • Bereich wird für kleine Werte aufgezogen, für große Werte komprimiert

Weitere Skalen für Achsen

x-Achse y-Achse Wirkung
scale_x_sqrt() scale_y_sqrt() Wurzelskala
scale_x_log10() scale_y_log10() Logarithmische Skala
scale_x_reverse() scale_y_reverse() Umgedrehte Skala

→ Definitionsmenge von Logarithmus und Wurzel beachten

Kontinuierliche Farbskala

Datensatz: Sinuskurve

d <- tibble(X = seq(0, 2, by = 0.05), Y = sin(pi * seq(0, 2, by = 0.05)))

Beispiel (nicht empfohlen)

ggplot(data = d) + geom_col(mapping = aes(x = X, y = Y, fill = Y)) +
  scale_fill_gradient(low = "green", high = "red")
  • scale_fill_gradient() erzeugt Farbverlauf mit zwei Farben

Beispiel (auch nicht empfohlen)

ggplot(data = d) + geom_col(mapping = aes(x = X, y = Y, fill = Y)) +
  scale_fill_gradient2(low = "orange", mid = "yellow", high = "green")
  • scale_fill_gradient2() erzeugt Farbverlauf mit drei Farben

Brewer-Farbpalette (empfohlen) 1/3

ggplot(data = d) + geom_col(mapping = aes(x = X, y = Y, fill = Y)) +
  scale_fill_distiller(palette = "RdBu")
  • Farbpalette nach Cynthia Brewer (gleich mehr dazu)

Brewer-Farbpalette (empfohlen) 2/3

ggplot(data = d) + geom_col(mapping = aes(x = X, y = Y, fill = Y)) +
  scale_fill_distiller(palette = "RdBu", direction = 1)
  • Mit direction = 1 Farbskala umdrehen

Brewer-Farbpalette (empfohlen) 3/3

ggplot(data = d) + geom_col(mapping = aes(x = X, y = Y, fill = Y)) +
  scale_fill_distiller(palette = "RdBu", direction = 1, guide = "legend")
  • Mit guide = "legend" die Darstellung der Farblegende anpassen

Brewer-Farbpalette mit Klassen (empfohlen)

ggplot(data = d) + geom_col(mapping = aes(x = X, y = Y, fill = Y)) +
  scale_fill_fermenter(palette = "RdBu", direction = 1)
  • Wortspiel der Entwickler: Fermentieren kommt nach destillieren

Logarithmische Farbskala

ggplot(data = mutate(d, Y = Y^16 + 1e-15)) +
  geom_col(mapping = aes(x = X, y = Y, fill = Y)) +
  scale_fill_fermenter(palette = "RdBu", trans = "log10") +
  scale_y_log10()
  • Farben mit trans = "log10" dem Logarithmus der Werte zuordnen

Kontinuierliche Farbskalen

Element Argumente Funktion
scale_AAA_gradient low, high Farbverlauf von low nach high
scale_AAA_gradient2 low, mid, high Farbverlauf mit drei Farben
scale_AAA_distiller palette Brewer-Farbpaletten
scale_AAA_fermenter palette Brewer-Farbpaletten mit Klassen

→ Für AAA je nach Anwendung entweder ‘color’ oder ‘fill’ einsetzen

Optionen für alle kontinuierlichen Farbskalen

Option Mögliche Werte Funktion
direction 1, -1 Richtung der Farbskala
guide “colourbar”, “legend” Kontinuierliche Skala oder diskrete Farben
trans “idendity”, “log10”, … Transformation für Werte

Diskrete Farbskala manuell (erster Versuch)

d <- tibble(farbe = c("rot", "grün", "blau", "grün", "rot", "grün"))
ggplot(data = d) +
  geom_bar(mapping = aes(x = farbe, fill = farbe)) +
  scale_fill_manual(values = c("red", "blue", "green"))
  • Zuordnung quasi zufällig

Diskrete Farbskala manuell (zweiter Versuch)

d <- tibble(farbe = c("rot", "grün", "blau", "grün", "rot", "grün"))
ggplot(data = d) +
  geom_bar(mapping = aes(x = farbe, fill = farbe)) +
  scale_fill_manual(values = c("rot" = "red", "blau" = "blue", "grün" = "green"))
  • Zuordnung mit Ausprägung = Farbe angeben

Brewer-Farbpalette

ggplot(data = d_wb_2012) + geom_bar(mapping = aes(x = region, fill = region)) +
  scale_fill_brewer(palette = "Set1")

Brewer-Farbpaletten

  • Kontinuierlich: scale_color_distiller(palette = p) oder scale_fill_distiller(palette = p)
  • Diskret: scale_color_brewer(palette = p) oder scale_fill_brewer(palette = p)

Brewer-Farbpaletten

  • Entwickelt von Cynthia Brewer
  • Kartographin an der Penn State Universität
  • Webseite

4 Beschriftungen

Beschriftung mit labs()

ggplot(data = d_ns_bochum_monat) +
  geom_histogram(mapping = aes(x = NS), binwidth = 15, boundary = 0) +
  labs(
    title = "Niederschläge in Bochum", subtitle = "1951 - 2017",
    x = "Monatlicher Niederschlag (mm)", y = "Anzahl der Monate",
    caption = "Quelle: Deutscher Wetterdienst"
  )

Beschriftung der Farblegende

ggplot(data = d_wb_2012) + geom_bar(mapping = aes(x = region, fill = region)) +
  labs(fill = "Weltregion")
  • Legende ebenfalls mit labs beschriften
  • Zum Beispiel für die Füllfarbe: fill = Titel

Beschriftung entfernen

ggplot(data = filter(d_ns_bochum_monat, Jahr >= 2000)) +
  geom_boxplot(mapping = aes(x = factor(Jahr), y = NS)) +
  labs(x = NULL, y = NULL)
  • Wert NULL entfernt die Beschriftung und den dafür reservierten Platz

Beschriftung drehen

ggplot(data = d_wb_2012) +
  geom_bar(mapping = aes(x = region, fill = region)) +
  guides(x = guide_axis(angle = 45))

  • Erste Möglichkeit, wenn Beschriftungen auf x-Achse zu lang
  • Geschmackssache

Beschriftung versetzen

ggplot(data = d_wb_2012) +
  geom_bar(mapping = aes(x = region, fill = region)) +
  guides(x = guide_axis(n.dodge = 3))

  • Zweite Möglichkeit, wenn Beschriftungen auf x-Achse zu lang
  • Auch Geschmackssache

5 Koordinatensysteme

Achsen vertauschen mit coord_flip()

ggplot(data = d_wb_2012) +
  geom_bar(mapping = aes(x = region, fill = region)) +
  coord_flip()
  • Vertauscht die x-Achse mit der y-Achse

Plotbereich mit coord_cartesian()

ggplot(data = d_wb_countries) +
  geom_ribbon(mapping = aes(x = year, ymin = 0, ymax = gdp, color = country, fill = country), alpha = 0.3) +
  coord_cartesian(xlim = c(1980, 2010), ylim = c(0, 4e12))
  • Bereich mit xlim = c(xmin, xmax) und ylim = c(ymin, ymax)

Polarkoordinaten mit coord_polar()

ggplot(data = d_wb_countries) +
  geom_ribbon(mapping = aes(x = year, ymin = 0, ymax = gdp, color = country, fill = country), alpha = 0.3) +
  coord_polar(theta = "y")
  • Ein Wert wird zum Radius, der andere zum Winkel
  • Variable ("x" oder "y") für Winkel mit theta

Tortendiagramm

ggplot(data = d_wb_countries_2012) +
  geom_col(mapping = aes(x = 0, y = gge, fill = country), color = "black", width = 1) +
  coord_polar(theta = "y") + theme_void()
  • Gestapeltes Balkendiagramm wird zum Tortendiagramm
  • theme_void() entfernt Dekoration (gleich)

Ringdiagramm

ggplot(data = d_wb_countries_2012) +
  geom_col(mapping = aes(x = 0.5, y = gge, fill = country), color = "black", width = 1) +
  scale_x_continuous(limits = c(-1, 1)) + coord_polar(theta = "y") + theme_void()
  • Bereich der x-Achse anpassen
  • theme_void() entfernt Dekoration (gleich)

6 Themes

Voreinstellungen für Graphiken anpassen

Erscheinungsbild anpassen mit theme()

ggplot(data = d_wb_2012) +
  geom_bar(mapping = aes(x = region, fill = region)) +
  theme(
    panel.background = element_rect(fill = "pink"),
    panel.grid.major = element_line(color = "hot pink")
  )
  • Alle Plot-Elemente lassen sich mithilfe von theme() anpassen
  • Insgesamt ca. 80 Einstellungsmöglichkeiten
  • Tipp: Nicht zuviel Zeit damit verbringen

Voreingestellte Themes

  • Vernünftige Voreinstellungen
  • theme_void() entfernt alles
  • Weitere Themes im Paket ggthemes

Globale Einstellungen zu Beginn des Dokuments, zum Beispiel:

theme_set(theme_bw())

7 Farben ändern

Nicht allen gefallen die grauen Balken…

Farben für einzelnen Plot setzen

ggplot(data = d_ns_bochum_monat) +
  geom_histogram(mapping = aes(x = NS), fill = "orange", color = "black")

Problem: Viel Arbeit, wenn die Plots einheitlich aussehen sollen

Besser: Voreinstellungen global ändern

line_color <- "black"
fill_color <- "light blue"
update_geom_defaults("bar",   list(fill = fill_color, color = line_color))
update_geom_defaults("point", list(fill = fill_color, color = line_color))
update_geom_defaults("boxplot", list(fill = fill_color))

# und so weiter

  • Einstellungen für alle Plots zu Beginn des Dokuments
  • Lässt sich später einfach ändern

Farben angeben

Mit dem Namen einer Farbe

  • Zum Beispiel "red" (mehr als 600 vordefinierte Farben)
  • colors() gibt Namen der vordefinierten Farben
  • http://sape.inf.usi.ch/quick-reference/ggplot2/colour

Mit RGB-Wert

  • Zum Beispiel rgb(0, 0.7, 1)

Mit Hex-Wert

  • Zum Beispiel "#45e32f"
  • Farben in R standardmäßig als Hexadezimalzahl

8 Legenden entfernen

Methode 1: Legende für einzelne Skala

ggplot(data = d_wb_2012) +
  geom_point(mapping = aes(x = gdp, y = gge, color = region, size = pop)) +
  scale_x_log10() + scale_y_log10() +
  scale_size(guide = "none")
  • Argument guide = "none" für die Größenskala
  • Farbskala entfernen mit scale_color_discrete(guide = "none")

Methode 2: Alle Legenden für ein Geom

ggplot(data = d_wb_2012) +
  geom_point(mapping = aes(x = gdp, y = gge, color = region, size = pop), show.legend = FALSE) +
  scale_x_log10() + scale_y_log10()
  • Argument show.legend = FALSE entfernt alle Legenden für ein Geom