Balkendiagramme erstellen in Base R und mit ggplot2 – Gast-Video von Joachim Schork / Statistics Globe

Einfache Codebeispiele für Balkendiagramme in Base R und mit ggplot2, inkl. horizontaler Balken, Legende, gestapelte und gruppierte Balken. Beitrag basiert auf Gastvideo von Joachim Schork von Statistics Globe – Dank an Joachim!

Balkendiagramme in R erstellen

Herzlichen Dank an  Joachim Schork für diesen Gastbeitrag auf meinem Youtube-Kanal!

Balkendiagramme in Base R

In Base R lautet die Funktion zum Erstellen von Balken- oder Säulendiagrammen schlicht barplot:

# Beispieldaten erstellen

df1 <- data.frame(values = c(5, 2, 7, 2), group = LETTERS[1:4])

# Simples Balkendiagramm
barplot(values ~ group, df1)

# Horizontale Darstellung
barplot(values ~ group, df1, horiz = TRUE)

# Unterschiedliche Farben
barplot(values ~ group, df1, col = 1:4)

# Legende ergänzen
legend("topright", df1$group, fill = 1:4)

So sieht das letzte Beispiel mit Farben und Legende aus:

Base R Balkendiagramm mit Farben und Legende
Base R Balkendiagramm mit Farben und Legende

Ich bevorzuge allerdings das ggplot2-Erweiterungspaket, das an der grammar of graphics angelehnt ist und einige Vorteile mit sich bringt, wie etwa das Verwalten der Grafiken als Objekte, die jederzeit flexibel ergänzt und bearbeitet werden können, sowie die automatische Erstellung von Legenden.

Balkendiagramme mit ggplot2 erstellen

Vor der ersten Verwendung muss das Paket ggf. installiert werden – entweder einzeln oder, was durchaus empfehlenswert ist, gleich das gesamte tidyverse, eine praktische Paketsammlung zur Datenbearbeitung.

install.packages("ggplot2")   # nur einmalig erforderlich
# Alternative: install.packages("tidyverse")
# installiert mehrere Pakete, inkl. ggplot2

library("ggplot2")   # vor jeder Verwendung laden
                     # geht auch ohne Anführungszeiten

# Alternative: library(tidyverse)  # lädt mehrere Pakete inkl. ggplot2

In ggplot2 werden Diagramme in Schichten aufgebaut. Die drei Basisschichten sind: Daten, Ästhetiken, Geometrien. Somit sieht der Code für ein simples Barplot so aus:

ggplot(df1, aes(x = group, y = values)) +
  geom_bar(stat = "identity")

# Falls die Daten nicht aggregiert werden müssen, sondern die Balkenhöhe direkt enthalten, gibt es eine Abkürzung:

ggplot(df1, aes(x = group, y = values)) +
  geom_col()

Möchte man die Achsen vertauschen, sodass das Diagramm horizontal dargestellt wird, gibt es zwei Möglichkeiten:

ggplot(df1, aes(x = group, y = values)) +
geom_col() +
coord_flip()

# In neueren ggplot2-Versionen kann man auch einfach die Ästhetiken x und y vertauschen

ggplot(df1, aes(y = group, x = values)) +
  geom_col()

Balkendiagramm mit farbigen Balken

Für farbige Balken geben wir lediglich die fill-Ästhetik an:

ggplot(df1, aes(x = group, y = values, fill = group)) +
  geom_col()

ggplot2 erstellt, im Gegensatz zu Base R, die Legende automatisch.

Gestapelte und gruppierte Balken

Zunächst legen wir einen erweiterten Datensatz sowie Untergruppen an:

df2 <- data.frame(values = c(3, 2, 6, 3, 4, 3, 8, 2),
  maingroup = rep(LETTERS[1:4], each = 2),
  subgroup = letters[1:2])

# Datensatz ausgeben
df2

Gestapelte Balken:

ggplot(df2, aes(x = maingroup, y = values, fill = subgroup)) +
  geom_bar(stat = "identity")

# Auf 1 skalieren
ggplot(df2, aes(x = maingroup, y = values, fill = subgroup)) +
  geom_bar(stat = "identity", position = "fill")

Das zuletzt beschriebene Diagramm sieht so aus:

Gestapelte Balken, auf 1 normiert
Gestapelte Balken, auf 1 normiert, mit ggplot2 erstellt

Wer die Beschriftung lieber in Prozent sieht, kann das mit dem scales-Paket bewerkstelligen:

ggplot(df2, aes(x = maingroup, y = values, fill = subgroup)) +
 geom_bar(stat = "identity", position = "fill") +
 scale_y_continuous(labels = scales::percent_format())
Gestapelte Balken, Prozent-Beschriftung
Gestapelte Balken, Prozent-Beschriftung, erstellt mit ggplot2 und scales

Zu guter Letzt noch ein gruppiertes Balkendiagramm:

ggplot(df2, aes(x = maingroup, y = values, fill = subgroup)) +
geom_bar(stat = "identity", position = "dodge")
gruppiertes Balkendiagramm
gruppiertes Balkendiagramm mit ggplot2

Ausblick

Auf dieser Basis kann man seine Diagramme verfeinern – Anregungen:

  • Diagrammstil variieren, etwa mit anderen als dem voreingestellten theme; siehe ggplot2: Die vier fortgeschrittenen Schichten
  • Farben variieren mit Funktionen wie scale_fill_discrete() oder scale_fill_manual()
  • Statistische Tests ergänzen, z. B. ganz einfach mit dem ggstatsplot-Paket und der Funktion ggbarstats()

Es gibt einen dazu passenden englischsprachigen Artikel auf data-hacks.com.

Hier geht’s zu Joachims Youtube-Kanal StatisticsGlobe.

Freue mich über Kommentare!

Wir benutzen Cookies um die Nutzerfreundlichkeit der Webseite zu verbessen. Durch Deinen Besuch stimmst Du dem zu.