“make a hundred charts and pick one” — Amanda Cox

Vorbereitung

  1. Workshop-Material herunterladen: material.zip
  2. ZIP-Archiv an einem beliegen Ort entpacken
  3. Anschließend die Datei workshop-teil2.Rmd in RStudio öffnen

Daten einlesen

Zunächst laden wir die benötigten R-Pakete. readr stellt Funktionen zum einlesen von CSV Dateien bereit, dplyr liefert praktische Werkzeuge zum analysieren und transformieren von Tabellen, und ggplot2 ist das Visualisierungs-Framework das wir heute benutzen.

Die folgenen Code Blöcke (genannt “chunks”) lassen sich in RStudio durch Klick auf den grünen Pfeil oben rechts im Block ausführen.

needs(readr, dplyr, ggplot2)

# falls das nicht klappt, muss needs noch installiert werden
# install.packages('needs')
# library(needs)

theme_set(theme_light())

Nun laden wir den im ersten Teil vorbereiteten Datensatz btw-final.csv und speichern ihn in der Variable btw. Die mutate Anweisung in der zweiten Zeile können wir erstmal ignorieren (sie legt nur die Reihenfolge fest, in der die Werte in der Spalte gruppe nachher in den Diagrammen auftauchen).

btw <- read_csv('btw-final.csv') %>% 
  mutate(gruppe=factor(gruppe, c('L_SG', 'C_SG', 'C_RRG', 'L_RRG')))
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   Nr = col_integer(),
##   Wahlkreis = col_character(),
##   Land = col_integer(),
##   Total = col_integer(),
##   CDU = col_integer(),
##   SPD = col_integer(),
##   CSU = col_integer(),
##   FDP = col_integer(),
##   GRÜNE = col_integer(),
##   LINKE = col_integer(),
##   RRG = col_integer(),
##   SG = col_integer(),
##   winner = col_character(),
##   landslide = col_logical(),
##   gruppe = col_character(),
##   Gemeinden = col_character()
## )
## See spec(...) for full column specifications.

Nach dem Ausführen des Blocks erscheint in RStudio oben links im “Environment” Fenster ein neuer Eintrag “btw”. Durch klick auf den Eintrag können wir uns den Datensatz genauer ansehen.

Fingerübungen mit ggplot

Kommen wir zum spannenden Teil: Daten visualisieren mit ggplot2. Die Syntax ist etwas gewöhnungsbedürftig, aber sehr mächtig wenn man erstmal den Dreh raus hat.

Die Funktion ggplot() macht allein erst mal nichts, außer einen leeren Plot zu erstellen und ihm einen Datensatz zuzuordnen.

ggplot(btw)

Über den zweiten Parameter mapping kann man Spalten aus dem Datensatz zu Plot-Eigenschaften (den sogenannten “aesthetics”) zuordnen, wie z.B. x, y oder color. ggplot erstellt dann ggf. schon automatisch Achsen und Gitternetzlinien.

ggplot(btw, aes(x=Bevölkerungsdichte, y=SPD))

Um nun Datenpunkte auf den Plot zu bekommen müssen wir weitere Ebenen zum Plot hinzufügen. Dazu “addieren” wir weitere ggplot-Funktionen zu dem Ergebnis des ersten ggplot() Aufrufs. In diesem Fall wollen wir Punkte, also benutzen wir geom_point():

ggplot(btw, aes(x=Bevölkerungsdichte, y=SPD)) +
  geom_point()

Plot-Eigenschaften anpassen

Jede ggplot Funktion hat selbst eine Reihe von Parametern über die das Aussehen der Plot-Ebene angepasst werden kann.

Im Falle von geom_point lassen sich Form, Farbe, Größe und viele weitere visuelle Eigenschaften der Symbole ändern (für eine Liste aller möglichen Parameter können wir die Hilfefunktion benutzen):

ggplot(btw, aes(x=Bevölkerungsdichte, y=SPD)) +
  geom_point(color='red', shape=2)

Anstatt die Eigenschaften nur “statisch” für alle Punkte gleichermaßen zu verändern kann man auch weitere Spalten aus dem Datensatz verwenden und so neue Dimensionen zu dem Plot hinzufügen.

Im folgenden Beispiel färben wir die Symbole je nach dem Wert der Spalte landslide, und wir machen die Symbolgröße abhängig von dem Wert in der Spalte Ohne.Hauptschulabschluss.

ggplot(btw, aes(x=Bevölkerungsdichte, y=SPD)) +
  geom_point(aes(color=landslide, size=Ohne.Hauptschulabschluss), alpha=0.5)