ggplot2 ist der de-facto-Standard, um professionelle, ansprechende Grafiken in R zu erstellen. Heute sehen wir uns die drei Basisschichten an, die für jede ggplot2-Grafik erforderlich sind.
ggplot2 basiert auf der Grammatik der grafischen Darstellung (Grammar of Graphics), die auf Leland Wilkinson zurückgeht. Er beschrieb das Konzept unabhängig von R in seinem Buch von 1999 (siehe unten).
Niemand muss sich vom Begriff Grammatik abschrecken lassen – schöne Grafiken mit ggplot2 zu erstellen ist deutlich einfacher, als eine Fremdsprache zu erlernen. Insbesondere, da es eine grafische Oberfläche gibt, mit der man per Mausklick die ersten Schritte gehen kann:
Hadley Wickham, der Autor des ggplot2-Pakets, hat folgenden Artikel veröffentlicht: A layered grammar of graphics, Journal of Computational and Graphical Statistics, 2010. Man muss allerdings weder das Buch noch den Artikel gelesen haben, um loslegen zu können:
Grundideen der Grammar of Graphics: Sieben Schichten
- Grafiken werden aus Schichten „grammatischer Elemente“ aufgebaut
- Variablen werden auf Ästhetiken bezogen („aesthetic mapping“)
- Insgesamt gibt es sieben Schichten
Von den sieben Schichten sind drei essentiell, d. h. sie müssen für jede Grafik angegeben werden:
- Daten
- Ästhetiken: Skalen, die wir Daten zuordnen
- Geometrien: Visuelle Elemente, die Daten darstellen
Die weiteren („fortgeschrittenen“) Schichten sind optional und Thema eines folgenden Beitrags – schon mal als Ausblick: 4. Facetten (Facets); 5. Statistische Transformationen; 6. Koordinatensysteme; 7. Themes (Stile, „Non-Data Ink – Tinte, die keine Daten darstellt“).
1. Schicht in ggplot2: Daten
Im Folgenden laden wir das tidyverse – ein Meta-Paket, das neben anderen nützlichen Erweiterungspaketen auch ggplot2 enthält. Darin findet sich der Datensatz diamonds.
library(tidyverse) data(diamonds) ggplot(data = diamonds)
Die Daten allein anzugeben, reicht nicht aus, um eine Grafik zu erstellen. Immerhin erhalten wir schon mal einen grau hinterlegten Diagrammbereich:
![](https://i0.wp.com/statistik-dresden.de/wp-content/uploads/2021/11/ggplot2-data.png?resize=504%2C504&ssl=1)
2. Schicht: Ästhetiken
Zusätzlich zum Datensatz müssen wir angeben, welche Variablen auf welche Ästhetiken bezogen werden. Hier machen wir es uns einfach: Wir geben nur eine Ästhetik an, und zwar die Variable, die auf der x-Achse gezeigt werden soll:
ggplot(diamonds, aes(x = cut))
![](https://i0.wp.com/statistik-dresden.de/wp-content/uploads/2021/11/ggplot2-data-aesthetics.png?resize=504%2C504&ssl=1)
Weitere Ästhetiken:
- y-Achse
- Farbe (color), Füllung (fill)
- Größe (size)
- Beschriftungen (labels)
- Transparenz (alpha): ein gutes Mittel, um mit Overplotting (sich überlappende Datenpunkte) umzugehen, etwa in Streudiagrammen bei großen Datenmengen
- Form (shape)
- Linientyp (line type), Linienstärke (line width)
Es gibt prinzipiell keine Grenze, wie viele Ästhetiken in einer Grafik verwendet werden können. Häufig werden neben den Variablen, die den Achsen zugeordnet werden, weitere Variablen über Farben, Formen oder Größen codiert.
3. Schicht in ggplot2: Geometrie („Diagrammtyp“)
Eine umgangssprachliche Übersetzung für die zunächst etwas sperrige Bezeichnung „Geometrie“ lautet: Diagrammtyp. Wir müssen ggplot2 mitteilen, auf welche Art die Daten visualisiert werden sollen. Wieder machen wir es uns einfach: Wir nehmen ein Balkendiagramm, ohne weitere Funktionsparameter.
ggplot(diamonds, aes(x = cut)) + geom_bar()
Nun haben wir ein gültiges Diagramm:
![](https://i0.wp.com/statistik-dresden.de/wp-content/uploads/2021/11/ggplot2-valid-plot.png?resize=504%2C504&ssl=1)
geom_bar() führt automatisch eine Datenaggregation aus und zählt die Einträge je Kategorie. Die Diamanten werden nach cuts unterschieden, von Fair bis Ideal. Die y-Achse wird automatisch mit count (Anzahl) beschriftet, die x-Achse mit dem Variablennamen cut.
Praktisch: Geometrien beginnen in ggplot2 mit dem geom_ -Präfix. Dadurch erhalten wir in RStudio durch Eingabe von ?geom_ ein Kontextmenü mit einer schnellen Übersicht:
![](https://i0.wp.com/statistik-dresden.de/wp-content/uploads/2021/11/geom-Kontextmenu.png?resize=840%2C215&ssl=1)
Es gibt bereits über 50 Geometrien allein in ggplot2. Weitere werden über Zusatzpakete ergänzt. Anregungen siehe ggplot2 Extensions Gallery.
Das Diagramm verbessern: Sinnvolle Beschriftungen
Warum ist es nicht nur sinnvoll, sondern sogar wichtig, Diagramme und insgesondere die Achsen sorgfältig zu beschriften? Nun, im schlimmsten Fall kann Nachlässigkeit zum Verlust der Beziehung führen:
![](https://i0.wp.com/statistik-dresden.de/wp-content/uploads/2021/11/xkcd-833-label-axes.png?resize=740%2C239&ssl=1)
Wir wollen also die Beschriftung unseres Minimal-Beispiels ein wenig aufpolieren:
ggplot(diamonds, aes(x = cut)) + geom_bar() + labs(title = "Quality of cuts", x = "Cut", y = "N", caption = "Diamonds dataset, ggplot2")
Nun sieht das Diagramm so aus:
![](https://i0.wp.com/statistik-dresden.de/wp-content/uploads/2021/11/ggplot2-valid-labels.png?resize=504%2C504&ssl=1)
Beim nächsten Mal nehmen wir uns die vier fortgeschrittenen Schichten im Schnelldurchlauf vor. Viel Erfolg bei Euren Datenvisualisierungen!
ggplot2: Elegant Graphics for Data Analysis (Use R!)
Storytelling mit Daten – Cole Nussbaumer Knaflic
Die aktuelle Version des ggplot2-Buchs von Hadley gibt es kostenlos online zu lesen.
4 Gedanken zu „ggplot2: Einführung in die drei Basisschichten – Daten, Ästhetiken, Geometrien“