Keine Frage: R ist mittlerweile die erste Wahl, wenn es darum geht, komplexe statistische Analysen von Datensätzen durchzuführen, seien es Zeitreihenanalysen oder Regressionen unterscheidlicher Art. Häufig erreichen uns auch Fragen zum genialen und umfangreichen Grafikpaket ggplot2 für R.
Wenn Sie Fragen zum Blogbeitrag haben oder selbst Grafiken in R mit ggplot2 durchführen wollen, so kontaktieren Sie uns einfach! In einem unverbindlichen Erstgespräch stellen wir Ihnen gerne unsere Statistik Beratung vor.
In diesem Artikel befassen wir uns mit vier grundlegenden Grafiken vor und zeigen in Art eines Tutorials zu ggplot, wie Sie diese selbst erstellen und umsetzen können:
- Scatterplot
- Histogramm
- Violin Plot
- Kreisdiagramm / Pie Chart
Grafiken in R: Leicht gemacht mit ggplot
Zunächst gilt es natürlich, das Paket ggplot2 zu installieren. Am einfachsten ist es, das Paket Tidyverse mit dem Befehl install.packages(“tidyverse”) zu installieren. Das Tidyverse ist eine Zusammenstellung der wichtigsten R Pakete für Data Science, darunter auch ggplot2. Zu Beginn des R Dokuments muss man nun nur noch library(tidyverse) oder library(ggplot2) angeben.
Für dieses ggplot2 Tutorial benutzen wir verschiedene Datensätze, die mit R mitgeliefert werden. Im Folgenden nutzen wir die Datensätze Iris und Diamonds. Nach dem Laden werfen wir wie immer zunächst einen Blick auf den Header (head()), um die Daten zu verstehen. Wichtig ist hier darauf zu achten, welche Variablen Faktoren sind und welche Variablen numerisch.
```{r}
data(diamonds)
data(iris)
head(diamonds)
head(iris)
```
Das ggplot2 Scatterplot
Die vielleicht wichtigste Grafik für numerische Daten ist der sogenannte Scatterplot. Um für einen ggplot Scatterplot zu erstellen, benötigen wir zwei numerische Variablen. In unserem Beispiel sind das die Längen der Blüten- bzw. Kelchblättern (Petal und Sepal Length) aus dem Iris-Datensatz. Dann bauen wir unseren Scatterplot wie folgt auf:
```{r}
ggplot(iris, aes(x=Sepal.Length, y=Petal.Length, color=Species)) +
geom_point() +
xlab("Sepal Length") + ylab("Petal Length") +
theme_minimal()
```
Im Befehl ggplot() geben wir zunächst den zu verwendenden Datensatz an. Hier kann man jeden R Dataframe verwenden. aes() beinhaltet alle Spalten des Dataframes, die angeben, was aufgetragen werden soll und wie die ästhetische Darstellung aussehen soll.
Im konkreten Fall hier bedeutet das: Sepal Length auf der x-Achse, Petal Length auf der y-Achse und zudem wollen wir die Spezies farbig codieren.
Ganz wichtig ist der Befehl geom_point(), denn dieser macht den Graf erst zu einem Scatterplot. Anschließend verwenden wir in diesem Tutorial ggplot das theme_minimal() und beschriften noch die Achsen mit xlab() und ylab(). Wichtig ist: beim Erstellen von Grafiken in R können beliebig viele ggplot Befehle mit Pluszeichen verbunden werden.
Ein solcher Scatterplot in R ermöglich auf einen Blick und rasch Schlussfolgerungen auf Zusammenhänge zweier metrischer Variablen. Farbkodierte Gruppen geben der Visualisierung zusätzlich eine besondere Tiefe.
Das ggplot2 Histogram für den optimalen Überblick
Jeder von uns weiß, was ein Histogram ist und wir können es gleichsam intuitiv lesen. Aber wie wird ein ggplot2 Histogram erstellt? Die Struktur des Codes in R ist ähnlich, wie wir es bereits aus dem Scatterplot kennen:
```{r}
ggplot(iris, aes(x=Sepal.Length, fill=Species)) +
geom_histogram( color="#e9ecef", alpha=0.8, position = 'identity') +
scale_y_continuous(breaks=c(0, 2, 4, 6, 8)) +
scale_fill_brewer(palette="Set2") +
xlab("Sepal Length") + ylab("Anzahl") +
theme_minimal()
```
Beim Histogramm gibt es natürlich nur eine x-Variable, da ein Histogram die Anzahl der Blattlängen in Intervalle unterteilt und aufzeichnet. Ähnlich wie die color-Variable beim Scatterplot wird hier die Spezies als farbige Füllung verwendet. geom_histogram() zeichnet dann das eigentliche Histogram.
Der Befehl scale_fill_brewer(palette=”Set2″) legt weiters die Farbpalette aus den Brewer’s Palletten fest. Im ggplot Histogram lässt sich außerdem die Einteilung der y-Achse auf bestimmte Werte festsetzen mit dem Befehl scale_y_continuous(breaks=c(0, 2, 4, 6, 8)).
In diesem Histogramm kann schnell und einfach die Verteilung der metrischen Variable in Abhängigkeit einer Gruppenzugehörigkeit nachvollzogen und interpretiert werden.
Der Violin Plot in R: Der verbesserte Boxplot
Kein Tutorial zu ggplot wäre vollständig, ohne über Boxplots zu sprechen. Kaum eine Grafik gibt einen so umfassenden Überblick über die gruppenabhängige Verteilung einer numerischen Variable wie ein Boxplot. Und mit R können wir noch eins drauf setzen:
Der Violin Plot in R erfüllt nicht nur alle Anforderungen eines Boxplots, sondern er zeigt auch noch intuitiv und verständlich die Dichteverteilung pro Box. Der verwendete Code sieht wie folgt aus:
```{r}
ggplot(iris, aes(y=Sepal.Length, x=Species, fill=Species)) +
geom_violin(width=.4, alpha=.5) +
geom_boxplot(width=.1, cex=.5) +
ylab("Sepal Length") +
theme_minimal() + theme(legend.position = "none")
ggsave(filename="violin.png")
```
Entscheidend ist hier die Kombination aus geom_violin() und geom_boxplot()! Weiters unterbinden wir mit theme(legend.position = “none”) das Hinzufügen einer Legende, die in diesem Plot tatsächlich nicht nötig ist.
Zu guter Letzt stellen wir noch den praktischen ggsave(filename=”name.png”) Befehl vor: Hiermit wird jeweils die letzte ausgeführte ggplot2 Instanz unter dem als filename angegebenen Dateinamen gespeichert.
Anmerkend sei erwähnt, dass bei ggplot als Dateiendung auch .pdf möglich ist.
Kreisdiagramme: Die Königsklasse der Grafiken in R
Um anteilige Verteilungen darstellen zu können, eignen sich Kreisdiagramme (auch Kuchen- oder Pie Chart) hervorragend. Wir kennen sie beispielsweise aus den Sitzverteilungen nach einer Bundes- oder Landtagswahl. Um solche Grafiken in R erstellen zu können, müssen wir ein paar Tricks anwenden.
Wir nutzen dafür den Diamantendatensatz und schauen uns die Verteilung der Schnittgüten an. In einem ersten Schritt erstellen wir in ggplot mit count() eine Tabelle, in der die absolute Häufigkeiten der verschiedenen Schnittgüten aufgeführt werden:
```{r}
cut.count <- diamonds %>%
count(cut, sort=T) %>%
mutate(fraction = n/sum(n)) %>%
mutate(ymax = cumsum(fraction)) %>%
mutate(ymin = c(0, head(ymax, n=-1))) %>%
mutate(labelpos = (ymax + ymin) / 2) %>%
mutate(label = paste0(cut, "\n N = ", n))
```
Weiters haben wir mit mutate() neue Variablen erstellt, die wir für die Erstellung des Kreisdiagramms benötigen. In diesem ggplot Tutorial nutzen wir einen Trick, indem wir zunächst mit geom_rect() einen parametrisierten Balken erstellen. Diesen versehen wir über geom_text() noch mit den oben erstellten Labels.
Anschließend ‘biegen’ wir mittels coord_polar(theta=“y“) den erstellten Balken um den Nullpunkt, und zwar zum Kreis. Das Ergebnis lässt sich mit der Brewer’s Palette noch in einer Farbe nach Wahl optimieren.
```{r}
ggplot(cut.count, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=cut)) +
geom_rect(alpha=0.6) +
geom_text( x=3.5, aes(y=labelpos, label=label), size=3.5) +
scale_fill_brewer(palette=2) +
coord_polar(theta="y") +
xlim(c(2, 4)) +
theme_void() + theme(legend.position = "none")
```
Um alle Details des o.a. Codes nachzuvollziehen, bietet es sich an, die hier vorgestellten Beispiele einmal selbst auszuführen und die Parameter Schritt für Schritt anzpassen bzw. zu abzuändern.
Fazit: Ein Anfang, aber noch lange kein Ende
R ist mittlerweile die erste Wahl bei komplexen statistischen Analysen, siehe dazu auch unsere Blogartikel zu Zeitreihenanalysen und Regressionen. Um daraus Grafiken in R erstellen zu können, braucht es ebenso keine jahrelange Übung. Viele ausdrucksvolle Plots lassen sich, wie man hier sieht, bereits mit einigen Code-Zeilen erstellen. Aber natürlich ist dies nur der Anfang. Dieses Tutorial zu ggplot deckt animierte Plots, 3D Plots und viele weitere Visualisierungsmöglichkeiten natürlich nicht ab.
Sollten Sie neugierig sein: Wir haben ausgefallene Grafiken in R bereits in einem früheren englischsprachigen Artikel dargestellt.
Wenn Sie Interesse haben und mehr über die Grafikfähigkeiten von R erfahren und diese gewinnbringend in Ihrem Business einsetzen wollen, dann setzen Sie gleich mit uns unverbindlich in Verbindung. Nutzen Sie für eine schriftliche Kontaktaufnahme gerne unser Kontaktformular!