Um Charts in R zu stellen, führt eigentlich kein Weg an dem R-Paket ggplot2 vorbei. Egal, ob Du ein barplot in R, also Säulen- bzw. Balkendiagramm, oder ein pie chart aus Deinen Daten erstellen willst. Für die meisten Charttypen hat ggplot eine entsprechende Visualisierung. Natürlich können viele Charts auch schon mit Base-R erstellt werden, aber ggplot2 hat durch die „grammar of graphics“ eine etwas klarere Struktur. Man programmiert eher, wie der Graph aussehen soll (deklarativ) und weniger, welche Schritte man machen muss (iterativ). Wer möchte, kann auf Englisch über die Vor- und Nachteile in den Artikeln „Why I use ggplot2“ von David Robinson oder „Why I don’t use ggplot2“ von Jeff Leek nachlesen. Meiner Meinung nach lohnt es sich aber auf jeden Fall, die Syntax von ggplot2 zu lernen.  

Das R-Package ggplot2 installieren

Sofern Du eine Internet-Verbindung hast, wie alle Packages mit der Funktion install.packages, also
install.packages("ggplot2")
Bei Packages ist es so, dass sie einmalig installiert werden müssen. Willst Du deren Funktionen dann in einem R-Skript verwenden, bindest Du das Package mit library oder require am Anfang vom Skript ein. Hierbei sind die Anführungsstriche nicht mehr nötig.
library(ggplot2)
#oder
require(ggplot2)
 

Scatterplots bzw. Punktwolken mit ggplot2

Eine Punktwolke (Scatterplot) stellt ist einfach eine Ansammlung von Punkten, welcher aus zwei Werten besteht. Jeder Punkt wird in einem Koordinatensystem dargestellt, indem der eine Wert auf der x-Achse und der andere auf der y-Achse abgetragen wird. Scatterplots sind gut geeignet, um die Beziehung zwischen zwei Variablen zu visualisieren. Haben wir zum Beispiel einen Datensatz, in dem Größe und Gewicht von Studienteilnehmern erhoben wurden, können wir die Größe auf die x-Achse und das Gewicht auf die y-Achse legen. Jeder Punkt entspricht dabei einem Studienteilnehmer, also einer Zeile in unserem Datensatz. Haben wir verschiedene Gruppen (z.B. Treatment- und Kontrollgruppe), können wir die Punkte entsprechend färben, um Unterschiede zu verdeutlichen. Scatterplots funktionieren nur bei metrischen Merkmalen gut. Haben wir zum Beispiel zwei ordinale Merkmal mit jeweils 3 Ausprägungen, würden alles Punkte mit denselben Ausprägungen übereinanderliegen. Man kann umgehen, indem man die Punkte zufällig ein bisschen verschiebt. Meistens ist aber ein Bubblechart besser geeignet, indem nur ein Punkt (eine Bubble) gezeichnet wird, dessen Größe aber der Anzahl der Datensätze mit dieser Ausprägung entspricht. In ggplot2 zeichnet man ein Scatterplot mit geom_point(). Die Variablen, die wir auf die x- und y-Achse legen wollen, werden in der Hauptfunktion in den aesthetics angegeben.
n <- 100
df <- data.frame(x = rnorm(n), y = rnorm(n, sd=0.5))
 
ggplot(df, aes(x = x, y=y)) +
  geom_point()
Ein Scatterplot/eine Punktwolke, welche mit ggplot2 in R erstellt wurde.
Um zwei Gruppen per Farbe zu uterscheiden, wählt man in den aesthetics die Gruppe als Farbe (color). Dabei muss man beachten, dass das Merkmal ein Faktor ist, ansonsten bekommen wir eine kontinuierliche Farbskala.
n <- 100
df <- data.frame(x = rnorm(n), y = rnorm(n, c(0,1), 0.5), gruppe = 1:2)
 
ggplot(df, aes(x = x, y=y, color=as.factor(gruppe))) +
  geom_point() +
  labs(color = "Gruppe")
ggplot2 Punktwolke mit zwei Gruppen, die unterschiedlich eingefärbt sind (Parameter color)

Ein Barplot in R erstellen – Säulendiagramme und Balkencharts

Mit Barplot meint man Balken- oder Säulendiagramm. Das Säulendiagramm hat vertikale Säulen, das Balkendiagramm ist um 90° gedreht und hat dementsprechend horizontale Balken. Jede Säule/Balken steht für eine Kategorie. Die Höhe der Säule bzw. Länge des Balkens entspricht dem Wert, den man visualisieren will, zum Beispiel den Umsatz.

Meistens lässt sich ein Säulendiagramm intuitiv erfassen. Bei vielen Kategorien bzw. langen Kategorienamen ist das Balkendiagramm besser geeignet.

In ggplot2 erzeugt man einen barplot mit geom_bar(). Fügt man keine Parameter hinzu, dann wird als Höhe die Anzahl der Datenpunkte mit der entsprechenden Ausprägung verwendet.

df <- data.frame(lieblingsfarbe = c("rot","grün","rot","blau","grün","blau","blau"))
ggplot(df, aes(x = lieblingsfarbe)) +
  geom_bar()
Säulendiagramm (barplot) mit absoluter Anzahl, erstellt mit ggplot2 in R
Um die Säulen entsprechend der Lieblingsfarbe zu färben, setzen wir den Parameter fill ebenfalls auf die Variabe. Zusätzlich geben wir mit scale_fill_manual noch an, mit welchen Farben wir die Säulen füllen wollen.
df <- data.frame(lieblingsfarbe = c("rot","grün","rot","blau","grün","blau","blau"))
ggplot(df, aes(x = lieblingsfarbe, fill = lieblingsfarbe)) +
  geom_bar() +
  scale_fill_manual(values = c("rot" = "darkred", "grün" = "darkgreen", "blau" = "darkblue"))
Barplot in ggplot2 mittels geom_bar, einzelne Säulen sind entsprechend der Antwort eingefärbt
Hat man schon eine Spalte mit Werten, die der Höhe entsprechen soll, ergänzt man diese Variable als y-Wert in den aesthetics und muss zudem in geom_bar die Zählmethode (stat) auf identity stellen. Wir wollen ja nichts berechnen, sondern einfach die Werte nehmen.
df <- data.frame(quartal = c("2021-Q1","2021-Q2","2021-Q3","2021-Q4"),
                 umsatz = c(150000,180000,160000,200000))
ggplot(df, aes(x = quartal, y = umsatz)) +
  geom_bar(stat = "identity")
Ein Säulendiagramm mit Umsatz pro Quartal, in ggplot2 erstellt

Balkendiagramm in R

Wie gesagt ist ein Balkendiagramm nur ein um 90° gedrehter Säulenchart, wir können also den gleichen Befehl zum Erstellen eines barplots in R nutzen und vertauschen dann einfach nur die Achsen. Das geht über den Befehl coord_flip().
df <- data.frame(quartal = c("2021-Q1","2021-Q2","2021-Q3","2021-Q4"),
                 umsatz = c(150000,180000,160000,200000))
ggplot(df, aes(x = quartal, y = umsatz)) +
  geom_bar(stat = "identity") +
  coord_flip()
Balkendiagramm als gedrehtes Säulendiagramm über geom_bar aus dem R-Package ggplot2

Ein Chart aus ggplot als Datei abspeichern

Es gibt zwei Möglichkeiten, ein Diagramm als Datei abzuspeichern. Entweder benutzt man die in R eingebauten Funktionen, die auch für die Base-R-Grafiken verwendet werden oder man ruft die Funktion ggsave() auf.

Grafik mit ggplot speichern

Ggplot liefert die Funktion ggsave() mit, um ein Diagramm in eine Datei zu schreiben. Der minimale Aufruf bekommt einfach nur einen Dateinamen. Ggsave erkennt an der Endung das Format und speichert den letzten Plot in die Datei. Man kann aber natürlich mehr Parameter übergeben:

  • filename: der Dateiname
  • plot: die Variable, die das Diagramm enthält
  • path: Ordner, in dem die Datei gespeichert werden soll
  • width, height, units, dpi: Mit diesen 4 Parametern kann man die Größe des Charts definieren. Unit kann dabei als „in“, „cm“, „mm“ oder „px“ gewählt werden. Dpi (dots per inch) gibt die Auflösung an, also zum Beispiel 300 für gute Druckqualität
  • scale: Alternativ bzw. zusätzlich kann noch ein Skalierungsfaktor angegeben werden. Wählt man zum Beispiel scale=2, dann verdoppelt man die Größe der Grafik.
g <- ggplot(df, aes(x = quartal, y = umsatz)) +  
  geom_bar(stat = "identity") + 
   coord_flip()
g
 
# minimaler Aufruf: speichert das letzte Diagramm
ggsave("grafik.png")
 
# und hier mit einigen Parametern versehen
ggsave(filename="grafik.png", plot=g, width=6, height=4, unit="cm", dpi=300)

 

Grafik mittels Base-R speichern

Der in Base-R vorgesehene Weg, eine Grafik zu speichern, sieht vor, zuerst ein sogenanntes „graphic device“ zu öffnen, dann über print die Grafik dorthin zu drucken und dann das device wieder zu schließen. So ein Device ist im Prinzip einfach eine Verbindung zu einer Datei und gibt es für viele verschiedene Formate:

  • pdf(“grafik.pdf”)
  • svg(“grafik.svg”)
  • png(“grafik.png”)
  • jpeg(“grafik.jpg”)
  • tiff(“grafik.tiff”)

Mit dev.off() wird das device wieder geschlossen.

Im Ganzen sieht das dann so aus. Wir erstellen ein ggplot-Diagramm und speichern es in der Variable g. Das Device wird geöffnet, g gedruckt und das Device wieder geschlossen

g <- ggplot(df, aes(x = quartal, y = umsatz)) + <br />   geom_bar(stat = "identity") + <br />   coord_flip()<br />g</p>
<p>svg("grafik.svg")<br />print(g)<br />dev.off()

 

 

Ggplot2 color – So änderst Du die Farbe

Je nach Diagramm-Typ lässt sich die Farbe mit den Parametern fill und/oder color verändern. Die Farbe könnt ihr entweder als Wort wie „darkred“ oder über den Hex-RGB-Code „#AA00BB“ angeben. Die in R definierten Farbworte findet ihr zum Beispiel in diesem PDF der Columbia University.

Der Hex-Code setzt sich aus den drei Farben Rot, Grün und Blau zusammen, die jeweils Werte von 0-255 haben. Damit die Zahl aber zweistellig bleibt, benutzt man das Hexadezimal- (16er-)System. Da folgt auf die Ziffern 0-9 noch die Buchstaben A, B, C, D, E, F. Nach 9 kommt also nicht 10, sondern A. Aber keine Sorge, fast jedes Grafikprogramm kann den Hexcode ausgeben. Es gibt auch Browser-Plugins, die das können.

Bei mehreren Farben, zum Beispiel für verschiedene Gruppen, könnt ihr auf vordefinierte Paletten zugreifen oder die Farben selber definieren. Letzteres haben wir oben schon im Lieblingsfarben-Beispiel gehabt. Das geht über die Funktion scale_fill_manual bzw. scale_color_manual.

 

Das Package RColorBrewer liefert viele Farbpaletten mit. Diese können per  + scale_fill_brewer(palette=“Palettenname“) aktiviert werden.

Die im R-Package RColorBrewer definiertenFarbpaletten zur Nutzung in ggplot2

Welche ggplot2 themes gibt es?

Ggplot kommt mit einigen Standard-Themes, die aber natürlich alle weiter angepasst werden können.

  • theme_grey() bzw. theme_gray(): Das Standard-Theme von ggplot2 mit grauem Hintergrund und weißen Gitterlinien
  • theme_bw(): weißer Hintergrund, keine Gitterlinien und schwarzer Rahmen um die Grafik
  • theme_linedraw(): wie theme_bw, aber mit schwarzen Gitterlinien
  • theme_light(): wie theme_linedraw, aber Rahmen und Gitterlinien sind hellgrau
  • theme_dark(): wie theme_light, aber mit dunkelgrauem Hintergrund
  • theme_minimal(): minimalistisch, weißer Hintergrund, weder Rahmen, Achsen noch Gitterlinien
  • theme_classic(): weißer Hintergrund, schwarze Achsen
  • theme_void(): leeres Theme, um darauf weiter aufzubauen

theme_gray()

theme_bw()

theme_linedraw()

theme_light()

theme_dark()

theme_minimal()

theme_classic()

theme_void()

Mit dem theme()-Befehl könnt ihr alles so verändern, wie ihr es benötigt. Es ist allerdings ein bisschen aufwändig, da man logischerweise jede Änderung definieren muss. Man kann sich aber auch ein theme definieren und in einer Variablen abspeichern. Beim ggplot-Aufruf fügt man dann einfach die Variable hinzu. Doch dazu ein anderes Mal mehr.

 

Das waren nur einige wenige Aspekte von ggplot2. Es gibt aber unzählige Charttypen und Individualisierungsoptionen.

Happy charting,

Euer Holger