ggplot2 - Elegante Plots in R

Aktualisiert: 23. Juli

R ist eine sehr populäre Statistiksoftware, die sich in den vergangenen Jahren neben Python zu einem Branchenstandard im Bereich Data Science und Machine Learning entwickelt hat. Daher überrascht es nicht, dass in R verschiedene sehr gute Pakete zur Visualisierung von Daten zur Verfügung stehen. Das bekannteste dieser Pakete ist ggplot2 von Hadley Wickham. Dieser Artikel stellt Ihnen das Grundkonzept der Datenvisualisierung in ggplot2 vor. Darüber hinaus erlernen Sie die Erstellung von gängigen Grafiken (z.B. Boxplots, Streu-, Häufigkeitsdiagramme oder Histogramme) mit Hilfe von ggplot2.


Sie benötigen beratende Hilfe bei Ihrer statistischen Auswertung in R oder möchten eine R Datenanalyse bestellen, dann zögern Sie nicht uns zu kontaktieren (Kontaktdaten unten rechts). Unsere Experten helfen Ihnen gerne weiter (kostenloses unverbindliches Erstgespräch)!


1. Datenvisualisierung in R - Eine kurze Einführung

Seit dem Erscheinen von R im Jahr 1992 wurden Grafiken (Plots) für eine lange Zeit mit dem hierzu zur Verfügung stehenden Basispaket graphics erstellt. Dieses steht automatisch bei Start von R zur Verfügung und muss nicht wie ggplot2 oder auch andere R-Pakete seperat installiert und geladen werden.


Mit Hilfe von graphics können zahlreiche Plots (Histogramm, Streu-, Häufigkeitsdiagramm, Boxplot, etc.) schnell und einfach erstellt werden. Allerdings schauen diese häufig ohne Anpassungen nicht sehr gut aus und Letztere sind für Anfänger oft schwierig. Aus diesem Grund hat das R-Paket ggplot2 des bekannten Data Scientists Hadley Wickham seit seiner Einführung im Jahr 2005 unfassbar an Popularität gewonnen.


2. Das Grundkonzept von ggplot2

Grundlage des Pakets ist die sog. Grammar of Graphics. Hierfür stehen auch die zwei g im Name des Pakets. Gemäß dieses Konzepts werden Grafiken aus verschiedenen unabhängigen Elementen zusammengesetzt. Die Hauptelemente sind:

  1. Datensatz mit den Variablen, welche grafisch visualisiert werden sollen.

  2. Aesthetics: Zuordnung (Mapping) von Variablen zu Aspekten (x- / y-Achse, Farbe, Form) des Plots.

  3. Art der grafischen Darstellung (Streu-, Linien-, Balkendiagramm, Boxplot, usw.).

Bei Bedarf können weitere Elemente (wie Beschriftungen, Skalen, Legenden, usw.) hinzugefügt werden, um den Plot zu personalisieren. Das Syntax-Grundgerüst in ggplot2 sieht wie folgt aus:

Grundgerüst der ggplot2-Syntax

Die Syntax beginnt mit dem ggplot( )-Befehl, wodurch ein Plot-Objekt erstellt wird. Diesem übergeben wir den Datensatz mit den zu visualisierenden Variablen sowie die sog. ästhetischen Mappings. Letztere werden mit der Funktion aes( ) definiert. Konkret teilen wir dabei ggplot2 mit, welche Variable auf welcher Achse abgebildet werden sollen und welche ggf. über eine bestimmte Eigenschaft (z.B. Farbe) der Grafik zur Gruppierung der Daten genutzt wird (später mehr dazu). Jedes visuelle Merkmal kann somit einen Aspekt der Daten darstellen und zur Vermittlung von Informationen verwendet werden.


Abschließend erfolgt die Angabe der Art der grafischen Darstellung mit Hilfe des gewünschten geom-Elements (z.B. geom_boxplot). Dieses wird zum im ersten Schritt erstellten Plot-Objekt mit dem + Operator hinzugefügt. Der + Operator ist der Schlüssel zur Erstellung anspruchsvoller ggplot2-Grafiken. Dieser erlaubt es Ihnen, einfach anzufangen und dann durch die Hinzufügung weiterer Elemente immer komplexer zu werden.


3. Grafiken mit ggplot2

Nachdem das Grundkonzept nun grob verstanden sein sollte, erstellen wir im Folgenden gängige deskriptive Grafiken. Dabei werden wir auch detaillierter auf die ästhetischen Mappings und die Personalisierung von ggplot2-Grafiken durch das Hinzufügen von weiteren Elementen eingehen.


Da uns die Reproduzierbarkeit unserer grafischen Analysen ein großes Anliegen ist, wird der Datensatz Credit aus dem ISLR-Paket verwendet. Dieses Paket stellt alle der im Buch 'An Introduction to Statistical Learning' verwendeten Datensätze zu Verfügung. Der Credit-Datensatz

enthält Informationen zu 400 Kreditkartenkunden. Insbesondere die folgenden Variablen werden von uns im Zuge der grafischen Analyse betrachtet:

  • Balance: Geldbetrag, den der Kunde seinem Kreditkartenunternehmen schuldet.

  • Income: Jahreseinkommen in 1.000 USD.

  • Student: Gibt an, ob es sich beim Kunden um einen Student handelt.

Bevor wir mit der Erstellung von passenden statistischen Grafiken loslegen, installieren wir die benötigten R-Pakete und laden den Credit-Datensatz aus dem Paket ISLR.

Syntax - ggplot2 installieren und laden

3.1 Histogramm

Da die Variable Balance metrisch skaliert ist, kann Sie mit Hilfe eines Histogramms grafisch dargestellt werden. Hierzu wird der folgende ggplot2-Code verwendet:

ggplot2 Syntax zur Erstellung eines Histogramms
Histogramm (mit ggplot2 erstellt)

Es ist zu erkennen, dass wir zunächst den Credit-Datensatz sowie die ästhetischen Mappings an den ggplot-Befehl übergeben. Im Zuge der Definition der ästhetischen Mappings wird ggplot2 hier nur mitgeteilt, dass die Variable Balance auf der x-Achse dargestellt werden soll. Daraufhin teilen wir R noch via geom_histogram mit, dass wir ein Histogramm haben wollen. Hierdurch würde bereits ein Histogramm mit 30 Klassen erstellt werden.


Die Argumente im geom-Element sind ebenso wie die weiteren zu sehenden Bausteine nur Feinheiten, die der Verschönerung des Plots dienen. Über das Break-Argument werden die Grenzen der Klassen des Histogramms festgelegt. Alternativ wäre auch die Angabe der Anzahl an Klassen über das bins-Argument oder die Angabe der Klassenbreite über binwidth möglich gewesen. Mit dem fill-Argument wird ggplot2 die Füllfarbe für die Rechtecke mitgeteilt. Das col-Argument dient der Festlegung der Farbe des Rechteckrahmens. Via dem Argument y im labs-Element kann der Name der y-Achse (ursprünglich: count) überschrieben werden und mit scale_x_continous ( ) werden die Achsenlabels angegeben.


Falls anstelle der Anzahl die Dichte auf der y-Achse dargestellt werden soll, muss dies wie folgt im Zuge der ästhetischen Mappings angegeben werden:

ggplot2 Syntax zur Erstellung eines Histogramms mit der Dichte auf der y-Achse

3.2 Häufigkeitsdiagramm (Barplot, Balkendiagramm)

Kategoriale Variablen werden in der deskriptiven Analyse mit Hilfe von Häufigkeitsdiagrammen dargestellt. Diese können in ggplot2 mit Hilfe von geom_bar erstellt werden.

ggplot2 Syntax zur Erstellung eines absoluten Häufigkeitsdiagramm
Absolutes Häufigkeitsdiagramm (mit ggplot2 erstellt)

Wie Sie erkennen können, ist das Grundgerüst des ggpot2-Befehls zur Erstellung des Barplots identisch mit dem zur Erzeugung des Histogramms. Lediglich das geom-Element weicht ab.


Die Text-Labels wurden der Grafik mit Hilfe von geom_text hinzugefügt. Dabei teilen wir R auf Basis des stat-Arguments mit, dass die Anzahl der Beobachtungen pro Gruppe gezählt werden soll. Diese wird anschließend durch ein zusätzlich angegebenes ästhetisches Mapping als Label ausgegeben. Mit den Argumenten vjust und size werden nur noch die vertikale Position und die Textgröße der Labels festgelegt. Über die Argumente des Elements labs können zudem die Achsenbeschriftungen, der Titel sowie der Untertitel des R-Plots definiert werden.


Alternativ kann auch anstelle eines absoluten ein relatives Häufigkeitsdiagramm erstellt werden. Hierzu muss lediglich y im Zuge der Definition der ästhetischen Mappings wie folgt geändert werden.

ggplot2 Syntax zur Erstellung eines relativen Häufigkeitsdiagramms
Relatives Häufigkeitsdiagramm (mit ggplot2 erstellt)

3.3 Streudiagramm (Scatterplot)

Das Streudiagramm wird in der Regel zur Analyse des Zusammenhangs zwischen zwei metrischen Variablen eingesetzt. Es wird in ggplot2 via geom_point erzeugt.

ggplot2 Syntax zur Erstellung eines Streudiagramms
Scatterplot (mit ggplot2 erstellt)

Problemlos können wir mit Hilfe von geom_smooth dem Scatterplot eine lineare Regressionslinie hinzufügen. Hierzu teilen wir geom_smooth die Schätzmethode (hier lm für linear model) und die Regressionsgleichung mit. Standardfehler wurden hier nicht visualisiert.

ggplot2 Syntax zur Erstellung eines Streudiagramms inkl. linearer Regressionslinie
Scatterplot mit linearer Regressionslinie (mit ggplot2 erstellt)

Über die Definition von weiteren ästhetischen Mappings (z.B. shape und col) können weitere Informationen vermittelt werden. In der folgenden Grafik gibt die Farbe Auskunft über das Jahreseinkommen des Kunden. Die Form (Punkt oder Dreieck) vermittelt dagegen dem Beobachter, ob es ich bei einem Kunden um einen Student handelt. Ein weiteres Mapping wäre sogar noch über size möglich (Größe der Punkte in Abhängigkeit vom Wert einer Variable).

ggplot2 Syntax zur Erstellung eines Scatterplots mit verschiedenen ästhetischen Mappings
Scatterplot mit verschiedenen ästhetischen Mappings (mit ggplot2 erstellt)

Falls die Standardposition der Legende (rechte Seite des Plots) geändert werden soll, ist dies mit Hilfe des Arguments legend.position (z.B. "left", "top", etc.) im theme-Element möglich.


3.4 Boxplot

Der Boxplot wird häufig zur Untersuchung des Zusammenhangs zwischen einer kategorialen und einer metrischen Variable verwendet. In diesem Fall wird dann auch vom gruppierten bzw. bedingten Boxplot gesprochen. Es wird in ggplot2 via geom_boxplot erzeugt.

ggplot2 Syntax zur Erstellung eines Boxplots
Boxplot (mit ggplot2 erstellt)

Der Mittelwert (dargestellt durch die rote Raute) ist nicht standardmäßig im Boxplot enthalten. Diese statistische Kennzahl kann dem Boxplot mit Hilfe von stat_summary hinzugefügt werden.


3.5 Liniendiagramm

Liniendiagramme werden v.a. zur Visualisierung von Zeitreihen benötigt. Daher laden wir uns zunächst die täglichen Schlusskurse des S&P 500 (Ticker: ^GSPC) von Yahoo Finance herunter. Dies ist ganz einfach über getSymbols( ) aus dem bekannten R-Finance-Paket quantmod möglich. Die Schlusskurse können anschließend ganz einfach über geom_line visualisiert werden. Zu beachten ist dabei lediglich, dass getSymbols( ) ein sog. xts-Objekt (vereinfacht gesagt ein Dataframe mit der Datumsvariable als Zeilenname) zurückgibt. Die Datumsvariable erhalten wir, indem der index-Befehl auf das xts-Objekt angewandt wird.

R-Syntax: S&P 500 Kurse mit quantmod laden
ggplot2 Syntax zur Erstellung eines Liniendiagramms

3.6 Faceting

Das Paket ggplot2 verfügt über eine spezielle Technik namens Faceting, welches es dem Anwender ermöglicht, ein Diagramm für jede Ausprägung eines Faktors (bzw. mehrerer Faktoren) darzustellen. Im Folgenden wird das Streudiagramm zwischen Income und Balance für jede Ausprägung der nominalen Variable Student dargestellt. Hierzu fügen wir einfach zu unserem ursprünglichen Code (siehe 3.3) das Element facet_grid(~Student) hinzu.

ggplot2 Syntax zur Demonstration der Faceting-Technik
Streudiagramme aufgeteilt in zwei Unterdiagramme über die Faceting-Technik

3.7 Kombination von verschiedenen ggplot2-Plots in einer einzigen Grafik

Faceting ist ein großartige Methode, um ein Diagramm in mehrere Unterdiagramme aufzuteilen. Häufig sollen aber auch verschiedene Diagrammen in einer einzigen Abbildung kombiniert werden. Hier kommt das zu Beginn des Artikels installierte Patchwork-Paket von Thomas Lin Perderson ins Spiel. Es ermöglicht uns, seperate ggplot-Objekte flexibel und schnell in einer einzigen Abbildung zu kombinieren.


Um das Paket vorzustellen, erstellen wir nochmals einige der bereits in diesem Artikel dargestellten Grafiken mit dem Unterschied, dass wir die Plots dieses Mal in der R Arbeitsumgebung speichern. Auf Basis des Befehls in der letzten Zeile werden die Plots ausgegeben. Mit Hilfe des + Operators werden die beiden erstgenannten Plots horizontal nebeneinander angeordnet, während der letzte Plot wg. des / Operators unter diesen erscheint.

Kombination mehrerer ggplots mit patchwork
Patchwork Ausgabe von ggplot-Objekten

Die Klammern sowie die Operatoren + und / lassen uns also dank des patchwork-Pakets ggplot-Objekte einfach und flexibel in einer Abbildung kombinieren.


3.8 Quickplots in ggplot2

Für schnelle R-Plots, die keiner Personalisierung bedürfen, steht in ggplot2 der Befehl qplot zur Verfügung.

qplot-Syntax zur Erstellung eines Streudiagramms
Streudiagramm (mit qplot aus ggplot2 erstellt)

4. Fazit

Ziel dieses Artikels war es Ihnen das Grundkonzept von ggplot2 vorzustellen. Darauf aufbauend haben wir Ihnen gezeigt, wie gängige statistischen Grafiken in ggplot2 ertstellt werden und wie diese weiter personalisiert werden können. Falls Sie mehr über ggplot2 lernen möchten, empfehlen wir Ihnen das Buch "ggplot2: Elegant Graphics for Data Analysis" vom Entwickler des Pakets selbst. Einen schnellen Überblick über ggplot2 erhalten Sie auch durch einen Blick in das CheatSheet des Pakets.


Falls Sie Probleme bei der Datenanalyse mit R oder generell mit der Statistik haben sollten, dann zögern Sie nicht uns zu kontaktieren. Unser Team an Freelancern verfügt über langjährige Erfahrung auf dem Gebiet der datengetriebenen Arbeit. Wir beraten Sie gerne bei Ihrem statistischen Problem. Darüber hinaus können Sie bei uns auch komplette statistische Auswertungen bestellen (inkl. Dokumentation). Gerne bieten wir Ihnen hierfür ein kostenloses und unverbindliches Erstgespräch mit einem unserer Experten an. Sie können uns jederzeit per E-Mail oder Telefon (siehe unten rechts) erreichen.

1.515 Ansichten