Auf dieser Seite findest du eine Einführung in die Datenvisualisierung in R mit ggplot2.

Der gesamte Code, den du hier findest, kann von dir 1:1 in R umgesetzt werden. Die größte Lernwirkung hat diese Einführung, wenn du möglichst alles einmal selbst in R durchführst.


01 Vorbereitungen

Bevor wir loslegen können, müssen wir die Packages laden, die wir für unser Vorhaben benötigen. Zunächst ist das nur das SfL Package. Falls du dieses noch nicht geladen hast, hole dies nun nach:

library(SfL)

Nun laden wir die Datensätze, die wir nutzen werden:

data(data_a)
data(data_c)
data(data_s)
data(data_t)
data(data_v)

02 Einführung

In R gibt es eine Vielzahl an Möglichkeiten, Daten zu visualisieren. Die wohl einfachste Variante nutzt den plot() Befehl von R.

plot(data_s$sDur)

plot(data_s$typeOfS)

Der plot() Befehl kann auch zwei Variablen abhängig voneinander darstellen:

plot(data_s$typeOfS, data_s$sDur)

Ebenso kann der plot() Befehl mit anderen Funktionen kombiniert werden, z.B.:

plot(density(data_s$speakingRate))

Aufgaben

Erstelle nun selbst ein paar Plots. Nutze hierzu Variablen aus den drei Datensätzen, die wir in Punkt 00 geladen haben.

Lösung

Mögliche Plots sind z.B.:

plot(data_s$sDur, data_s$baseDur)
plot(data_s$speakingRate, data_s$sDur)

plot(data_a$hair, data_a$eyes)
plot(data_a$glasses, data_a$height)

plot(data_v$vowel, data_v$duration)
plot(data_v$structure, data_v$duration)

Natürlich sind auch Plots einzelner Variablen und anderer Kombinationen möglich.


03 ggplot2

Die überwiegende Mehrheit der mit R erstellten und in Publikationen geteilten Plots wird allerdings nicht mit der plot() Funktion erstellt, sondern mit dem Package ggplot2. Das Package folgt den Gedanken des Buches The Grammar of Graphics und ermöglicht das Erstellen komplexer Darstellungen.
Die Syntax von ggplot2 wirkt zunächst etwas unübersichtlich - mehr dazu in den folgenden Abschnitten.

Um ggplot2 im Folgenden nutzen zu können, musst du es selbstverständlich zunächst laden:

library(ggplot2)

Grundgerüst

Jeder mit ggplot2 erstelle Plot besteht aus drei Elementen:

  1. data: der Dataframe, aus dem die Daten für den Plot genommen werden
  2. aesthetics: Spezifizierung von x- und y-Achsenvariablen, Gruppierungen, Farbcodierung, etc.
  3. geometric object: Spezifizierung der Art des Plots

Diese drei Elemente sind im folgenden Befehl vereint. Beachte auch das + Zeichen am Ende der Zeile.

# Laden des in ggplot2 enthaltenen Datasets "midwest"
data("midwest", package = "ggplot2")

# Erstellen eines Plots
ggplot(midwest, aes(x=area, y=poptotal)) + 
  geom_point()

Initiiert wird das Plotten mit dem ggplot() Befehl. Als erstes Argument wird dann data angegeben; in diesem Fall midwest. Nach einem Komma folgt die aesthetics-Angabe mit aes(). Im vorliegenden Beispiel werden x- und y-Achse definiert.
Mit einem + wird dann in die nächste Zeile gewechselt. Hierbei ermöglicht das + einerseits den Zeilenwechsel (insbesondere gut für die Lesbarkeit) und andererseits verbindet es die Befehle in der ersten mit denen in der zweiten Zeile.
In der zweiten Zeile wird nun das geometric object bestimmt. Diese geometric objects beginnen immer mit geom_; nach dem Unterstrich folgt dann die Art des Plots. In diesem Fall handelt es sich um einen simplen Point-Plot.


ggplot2 bietet eine riesige Menge an Modifizierungsmöglichkeiten. So ist es z.B. einfach, folgende Dinge zu modifizieren.

Farbe

ggplot(midwest, aes(x=area, y=poptotal, color=state)) + 
  geom_point()

Punktgröße

ggplot(midwest, aes(x=area, y=poptotal, size=popasian)) + 
  geom_point()

Transparenz

ggplot(midwest, aes(x=area, y=poptotal, alpha=0.5)) + 
  geom_point()

Aufgaben

Erstelle nun selbst einen Point-Plot. Nutze hierzu die folgenden Variablen aus dem data_s Dataframe:

  • x=baseDur
  • y=sDur
  • color=typeOfS
  • size=speakingRate
  • alpha=0.5
Lösung
ggplot(data_s, aes(x=baseDur, y=sDur, color=typeOfS, size=speakingRate, alpha=0.5)) + 
  geom_point()

04 Bar Plots

Bar Plots gehören wohl zu den bekanntesten Plottypen. Meist geben die einzelnen Bars den Durchschnittswert einer bestimmten Variable oder Gruppe an, so auch im folgenden Beispiel:

ggplot(data_v, aes(x=vowel, y=duration)) +
  geom_bar(stat="summary", fun = "mean")

Hier beschreibt jede Bar die durchschnittliche Dauer des jeweiligen Vokals im Datensatz.


Fügt man nun weitere aesthetics-Spezifikationen hinzu, führt dies meist zu einem Stacking:

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean")

Hinweis: Im Falle von Bar Plots und einigen anderen Plotarten spezifiziert das fill-Argument die Farbe, nicht das color-Argument. Letzteres gibt in solchen Fällen die Farbe der Umrandung an:

ggplot(data_v, aes(x=vowel, y=duration, color=structure)) +
  geom_bar(stat="summary", fun = "mean")


Zurück zum eigentlichen Plot:

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean")

Während solche stacked Bar Plots zwar inhaltlich korrekt sind, sind sie oft nur schwer lesbar. Im vorliegenden Fall beträgt so die Durchschnittsdauer eines /a/ in einer single Silbe ca. \(190ms\) (blau). Möchten wir nun wissen, wie die Durchschnittsdauer eines /a/ in einer open Silbe ist (grün), müssen wir zunächst ablesen, wo der grüne Balken endet; etwa bei \(390ms\). Nun subtrahieren wir den Anfang des grünen Balken mit \(190ms\) von den \(390ms\) und erhalten so die Durchschnittsdauer: \(390ms-180ms=200ms\).
Während ein solches Vorgehen zwar machbar ist, dauert es doch eindeutig länger als das Ablesen an folgendem Plot:

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge())

Hier sind die Durchschnittswerte schnell ablesbar. Für /a/ gilt in double Silben ca. \(160ms\) (rot), in open Silben ca. \(210ms\) (grün), und in single Silben ca. \(170ms\).


Error Bars

Oftmals sind in Bar Plots auch s.g. Error Bars dargestellt. Diese geben entweder die Standardabweichung oder den Standardfehler für die jeweilige Verteilung an. Möchte man diese in einen Bar Plot integrieren, müssen sie zunächst berechnet und gespeichert werden. Hierzu kann man folgenden Befehl aus dem SfL Package nutzen.Setzt man diesen Befehl nun ein, erhält man einen neuen, kleineren Dateframe, welcher die angebenen Variablen sowie deren Durchschnittswerte und Standardabweichungen enthält:

data.barplot <- create_error_bar_df(data = data_v,
                    numerical = "duration",
                    factors = c("vowel", "structure"),
                    type = "sd")

Hier angegeben ist das ursprüngliche Dataset data_v, die Variable von Interesse duration, sowie die Variablen vowel und structure. Wir erhalten das folgende Datenset als Ergebnis:

Die vowel-Spalte enthält die drei Level des vowel-Faktors, die structure-Spalte die des structure-Faktors. In der duration-Spalte sind die Durchschnittswerte angegeben, in der sd-Spalte die zugehörigen Standardabweichungen.

Diesen Dataframe können wir nun nutzen, um einen Bar Plot mit Error Bars zu erstellen:

ggplot(data.barplot, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge()) +
  geom_errorbar(aes(ymin=duration-sd, ymax=duration+sd),
                width=.5,
                position=position_dodge(.9))

Die ersten zwei Zeilen dieses Plots sind uns bereits bekannt. Neu sind die weiteren Zeilen. In Zeile 3 ergänzen wir den Plot um ein weiteres geometric object, nämlich um geom_errorbar.
Als aesthetics geben wir als untersten y-Wert die Differenz von Durchschnittsdauer und Standardabweichung an; als obersten y-Wert geben wir die Summe von Durchschnittsdauer und Standardabweichung an.
In Zeilen 4 und 5 spezifizieren wird die Breite der Errorbars und ihre Position.

Aufgaben

Erstelle nun selbst einen Bar Plot. Nutze hierzu die folgenden Variablen aus dem data_s Dataframe:

  • x=typeOfS
  • y=sDur
  • color=typeOfS

Ergänze nun Error Bars für sDur.

Lösung
ggplot(data_s, aes(x=typeOfS, y=sDur, fill=typeOfS)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge())

Error Bars:

errorbars_s <- create_error_bar_df(data = data_s,
                    numerical = "sDur",
                    factors = "typeOfS",
                    type = "sd")

ggplot(errorbars_s, aes(x=typeOfS, y=sDur, fill=typeOfS)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge()) +
  geom_errorbar(aes(ymin=sDur-sd, ymax=sDur+sd),
                width=.5,
                position=position_dodge(.9))

05 Box Plots

Wenn auch wenig intuitiv, sind Box Plots relativ häufig in linguistischer, insbesondere in phonetischer, Forschungsliteratur anzutreffen. Ein simpler Box Plot kann in ggplot2 wie folgt erstellt werden:

ggplot(data_v, aes(x=vowel, y=duration)) +
  geom_boxplot()

Auch Box Plots können weiter modifiziert werden:

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_boxplot()

Aufgaben

Erstelle nun selbst Box Plots.

  1. Nutze die folgenden Variablen aus dem data_s Dataframe:
  • x=typeOfS
  • y=sDur
  • color=pauseBin
  1. Nutze die folgenden Variablen aus dem data_a Dataframe:
  • x=hair
  • y=height
  • color=gender
Lösung
ggplot(data_s, aes(x=typeOfS, y=sDur, fill=pauseBin)) +
  geom_boxplot()
ggplot(data_a, aes(x=hair, y=height, fill=gender)) +
  geom_boxplot()

06 Plots with Points

Es gibt verschiedene Plots, die hauptsächlich aus Punkten bestehen: Scatter Plots, Point Plots, Jitter Plots, Dot Plots.

Den Point Plot haben wir bereits zu Beginn kennengelernt:

ggplot(midwest, aes(x=area, y=poptotal)) + 
  geom_point()

Vergleichen wir den Point Plot nun mit einem Jitter Plot, finden wir kaum einen Unterschied:

ggplot(midwest, aes(x=area, y=poptotal)) + 
  geom_jitter()

Der Unterschied: In Jitter Plots werden Punkte leicht nach links und rechts verschoben, damit der Plot lesbarer ist. Es gilt daher: i.d.R. immer Jitter Plots einsetzen.


Besonders interessant werden Jitter Plots dann, wenn beide Variablen kontinuierlich sind:

ggplot(data_s, aes(x=sDur, y=baseDur)) + 
  geom_jitter()

Hier kann man aufgrund des visuellen Eindrucks Vermutungen bzgl. der Korrelation zweier Variablen anstellen. Möchte man einen Schritt weitergehen, lässt sich auch eine s.g. Regressionsgerade (mehr dazu an Tag 4) ergänzen:

ggplot(data_s, aes(x=sDur, y=baseDur)) + 
  geom_jitter() +
  geom_smooth(method=lm, se=FALSE)


Selbstverständlich lassen sich auch Jitter Plots weiter modifizieren, z.B.:

ggplot(data_s, aes(x=sDur, y=baseDur, color=typeOfS)) + 
  geom_jitter()

Aufgaben

Erstelle nun selbst Jitter Plots.

  1. Nutze die folgenden Variablen aus dem data_s Dataframe:
  • x=typeOfS
  • y=sDur
  • color=pauseBin
  1. Nutze die folgenden Variablen aus dem data_a Dataframe:
  • x=age
  • y=height
  • color=gender
  • ergänze eine Regressionsgerade
Lösung
ggplot(data_s, aes(x=typeOfS, y=sDur, color=pauseBin)) + 
  geom_jitter()
ggplot(data_a, aes(x=age, y=height)) + 
  geom_jitter() +
  geom_smooth(method=lm, se=FALSE)

07 Histograms

Histogramme werden i.d.R. eingesetzt, wenn es um die Verteilung von Daten geht. In ggplot2 lassen sich Histogramme einfach erstellen:

ggplot(data_v, aes(x=duration)) +
  geom_histogram()

Auch Histogramme können weiter angepasst werden:

ggplot(data_v, aes(x=duration)) +
  geom_histogram(colour="black", fill="darkblue")


Zu beachten bei Histogrammen ist die Anzahl der bins. Je mehr bins angegeben sind, desto mehr Balken hat ein Histogram:

ggplot(data_v, aes(x=duration)) +
  geom_histogram(colour="black", fill="darkblue", bins = 10)

ggplot(data_v, aes(x=duration)) +
  geom_histogram(colour="black", fill="darkblue", bins = 50)

ggplot(data_v, aes(x=duration)) +
  geom_histogram(colour="black", fill="darkblue", bins = 100)

Aufgaben

Erstelle nun selbst Histogramme.

  1. Nutze die folgenden Variablen aus dem data_s Dataframe:
  • sDur
  • baseDur
  • speakingRate
  1. Nutze die folgenden Variablen aus dem data_a Dataframe:
  • height
  1. Kannst du von der Verteilung in den Histgrammen darauf schließen, ob Variablen normalverteilt sind?
Lösung
ggplot(data_s, aes(x=sDur)) +
  geom_histogram(colour="black", fill="darkblue")

ggplot(data_s, aes(x=baseDur)) +
  geom_histogram(colour="black", fill="darkblue")

ggplot(data_s, aes(x=speakingRate)) +
  geom_histogram(colour="black", fill="darkblue")
ggplot(data_a, aes(x=height)) +
  geom_histogram(colour="black", fill="darkblue")

08 Density Plots

Je nach Komplexität werden Histogramme schnell schlecht lesbar. Daher kann man ebenso Density Plots einsetzen.

ggplot(data_v, aes(x=duration)) +
  geom_density()

Auch Density Plots können weiter angepasst werden:

ggplot(data_v, aes(x=duration)) +
  geom_density(fill="darkblue")


Vergleiche nun das folgende Histogramm mit dem nachfolgenden Density Plot. Welche Darstellung empfindest du als lesbarer?

ggplot(data_v, aes(x=duration, fill=vowel)) +
  geom_histogram(alpha=0.5)

ggplot(data_v, aes(x=duration, fill=vowel)) +
  geom_density(alpha=0.5)

Aufgaben

Erstelle nun selbst Density Plots mit alpha=0.5.

  1. Nutze die folgenden Variablen aus dem data_s Dataframe:
  • x=sDur, fill=typeOfS
  • x=baseDur, fill=typeOfS
  • x=speakingRate, fill=typeOfS
  1. Nutze die folgenden Variablen aus dem data_a Dataframe:
  • x=height, fill=gender
Lösung
ggplot(data_s, aes(x=sDur, fill=typeOfS)) +
  geom_density(alpha=0.5)

ggplot(data_s, aes(x=baseDur, fill=typeOfS)) +
  geom_density(alpha=0.5)

ggplot(data_s, aes(x=speakingRate, fill=typeOfS)) +
  geom_density(alpha=0.5)
ggplot(data_a, aes(x=height, fill=gender)) +
  geom_density(alpha=0.5)

09 Violin Plots

Violin Plots bestehen aus zwei rotierten Density Plots. Vergleicht man einzelne Level eines Faktors, sind Violin Plots noch lesbarer als Density Plots.

ggplot(data_v, aes(x=vowel, y=duration, fill=vowel)) +
  geom_violin(alpha=0.5)


Vergleiche die drei folgenden Plots bzgl. ihrer Lesbarkeit:

ggplot(data_v, aes(x=duration, fill=vowel)) +
  geom_histogram(alpha=0.5)

ggplot(data_v, aes(x=duration, fill=vowel)) +
  geom_density(alpha=0.5)

ggplot(data_v, aes(x=duration, y=vowel, fill=vowel)) +
  geom_violin(alpha=0.5)

Aufgaben

Erstelle nun selbst Violin Plots mit alpha=0.5. Beachte, dass Violin Plots auch eine y-Angabe benötigen.

Nutze die folgenden Variablen aus dem data_s Dataframe:

  • x=sDur, y=typeOfS, fill=typeOfS
  • x=baseDur, y=typeOfS, fill=typeOfS
  • x=speakingRate, y=typeOfS, fill=typeOfS
Lösung
ggplot(data_s, aes(x=sDur, y=typeOfS, fill=typeOfS)) +
  geom_violin(alpha=0.5)

ggplot(data_s, aes(x=baseDur, y=typeOfS, fill=typeOfS)) +
  geom_density(alpha=0.5)

ggplot(data_s, aes(x=speakingRate, y=typeOfS, fill=typeOfS)) +
  geom_density(alpha=0.5)

10 Modifikationen

Nachdem wir uns nun die häufigsten Plot-Arten angeschaut haben, folgen typische Modifikationen.

Alle Modifikationen werden an folgendem Standard-Bar-Plot vorgenommen:

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge())

Title and Axis Labels

Wir können dem Plot einen Titel geben und die Beschriftung der Achsen ändern:

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge())+
  ggtitle("Mean Durations of Vowels by Coda Structure") +
  xlab("Vowels") +
  ylab("Vowel Duration in Seconds")

Auch Schriftart, Stärke, Farbe, Größe und Platzierung können modifiziert werden:

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge())+
  ggtitle("Mean Durations of Vowels by Coda Structure") +
  xlab("Vowels") +
  ylab("Vowel Duration in Seconds") +
  theme(plot.title = element_text(size=10, face="italic"),
        axis.title.x = element_text(color="green", angle=45),
        axis.title.y = element_text(color="blue", size=12, face="bold"))

Aufgaben

Suche dir zwei zuvor erstellte Plots aus und passe die Beschriftung ihrer Achsen an. Ergänze außerdem einen Titel.

Legend Title and Position

Auch der Titel, etc., der Legende können geändert werden.

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge())+
  labs(fill="Coda \nStructure") +
  theme(legend.title = element_text(size=10, face="bold"))

So änderst du die Position der Legende:

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge())+
  theme(legend.position = "bottom")

Die Legende kann die folgenden Positionen annehmen: top, bottom, left, right, none.

Aufgaben

Suche dir zwei zuvor erstellte Plots aus und passe die Beschriftung ihrer Legende an. Ändere außerdem die Position der Legende.

Facets

Mit Facets kann man einen Plot in mehrere Teile aufteilen.

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge())+
  facet_grid(structure ~ .)

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge())+
  facet_grid(. ~ structure)

Während die zwei obigen Plots durch eine Variable gesplittet werden, kann man ebenso auch zwei Variablen angeben:

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge())+
  facet_grid(vowel ~ structure)

Aufgaben

Suche dir zwei zuvor erstellte Plots aus und wandel sie in Facets um.

Themes

ggplot2 bietet eine Vielzahl verschiedener Voreinstellungen für Plots an, s.g. Themes. Diese sind einfach eingebunden:

ggplot(data_v, aes(x=vowel, y=duration, fill=structure)) +
  geom_bar(stat="summary", fun = "mean", position=position_dodge())+
  theme_bw()

Einen Überblick über alle derzeitigen Themes findest du hier:

Die Themes lauten (von links nach rechts und von oben nach unten):
bp_gray, bp_bw, bp_linedraw | bp_light, bp_classic, bp_dark | bp_minimal, bp_test, bp_void

Aufgaben

Suche dir zwei zuvor erstellte Plots aus und teste ein paar Themes. Welches gefällt dir am besten?

Mehr, mehr, mehr!

ggplot2 bietet noch eine riesige Menge weiterer Möglichkeiten. Viele Dinge lassen sich direkt via Google finden - wer an zusammenhängenden Erklärungen interessiert ist, wird z.B. hier fündig:


11 Mehr Plots!

Wie eine schnelle Google-Suche zeigt, gibt es nahezu unendlich viele Möglichkeiten, Dinge mit ggplot2 darzustellen. Die Möglichenkeiten werden zusätzlich durch viele Packages erweitert. Es folgen ein paar nette Beispiele.


Highlight Plots

Mit dem gghighlight Package lassen sich Plots erstellen, die gehighlightete Bestanteile haben. Zum Beispiel folgender Density Plot:

library(gghighlight)

ggplot(data_s, aes(x=sDur, fill=typeOfS)) +
  geom_density() +
  gghighlight() +
  facet_wrap(~ typeOfS)

Aufgaben

Erstelle eine Histogram-Version des hier gezeigten Density-Highlight-Plots.

Lösung
library(gghighlight)

ggplot(data_s, aes(x=sDur, fill=typeOfS)) +
  geom_histogram() +
  gghighlight() +
  facet_wrap(~ typeOfS)


Ellipse Plot

Manchmal hilft das Einzeichnen von Ellipsen der Lesbarkeit von Plots numerischer Daten. Mit dem ggforce Package sind derartige Ellipsen umsetzbar:

library(ggforce)

ggplot(data_s, aes(x=sDur, y=speakingRate)) +
  geom_mark_ellipse(aes(fill=typeOfS, label=typeOfS))+
  geom_point()

Aufgaben

Erstelle den obigen Ellipse Plot mit anderen x und y Variablen.

Lösung

Eine Möglichkeit ist:

library(ggforce)

ggplot(data_s, aes(x=baseDur, y=pauseDur)) +
  geom_mark_ellipse(aes(fill=typeOfS, label=typeOfS))+
  geom_point()


Density Ridge Plot

Density Ridge Plots werden durch das ggridges Package ermöglicht. Diese Art von Plots ist besonders dann hilfreich, wenn normale Density Plots zu “voll” werden. Vergleiche:

data(data_v)

ggplot(data_v, aes(x=duration, fill=vowel)) +
  geom_density()

und

library(ggridges)

ggplot(data_v, aes(x=duration, y=vowel, fill=vowel)) +
  geom_density_ridges()

Aufgaben

Nutze den Density Plot aus Abschnitt 08 und wandle ihn in einen Density Ridge Plot um.

Lösung
# the density plot as found in section 08
ggplot(data_v, aes(x=duration)) +
  geom_density()

# the density ridge plot
library(ggridges)

ggplot(data_v, aes(x=duration, y=vowel, fill=vowel)) +
  geom_density_ridges()


Wettbewerb

Du bist schon fertig, hast aber noch Zeit? Du möchtest einfach noch mehr ausprobieren?

Diskutiere mit deinen Gruppenmitgliedern, was für euch einen schönen, d.h. ästhetisch ansprechenden und lesbaren, Plot ausmacht.

Erstelle dann mit unseren Datensätzen und den Inhalten, die du hier gelernt hast, den hässlichsten Plot, den du dir vorstellen kannst. Dafür kannst du selbstverständlich auch die anderen Datensätze auf dem SfL Package nutzen.