Facets (Teilgrafiken)

Kategoriale Variablen lassen sich in ggplot2 mit Facets darstellen. Ein Facet ist eine Grafik, die eine Untergruppe des Datensatzes abbildet. Zum Erstellen von Facets stehen die Funktionen facet_wrap() und facet_grid() zur Verfügung. Erstere (facet_wrap()) dient dazu, Facets auf Grundlage einer Variablen zu erstellen. Letztere (facet_grid()) dient dazu, Facets auf Grundlage von zwei oder mehr Variablen zu erstellen. Die Variablen, die als Facets verwendet werden sollen, werden nach dem Tilde-Zeichen (~) angegeben. In diesem Zusammenhang bezeichnet der Begriff Facet die einzelnen Grafiken. Jedes Facet stellt eine Untergruppe der Daten dar und kann somit als Teilgrafik betrachtet werden. Facets sind aus technischer Sicht nicht mit Panels zu verwechseln, die im nächsten Kapitel behandelt werden.

Facet Wrap: facet_wrap()

In der folgenden Abbildung wird facet_wrap() mit der Spalte class verwendet (die angibt, zu welchem Fahrzeugtyp das Auto gehört). Dadurch sollten separate Grafiken für jede Fahrzeugklasse entstehen.

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=3) +
  facet_wrap(class ~ .)
Streudiagramm von hwy gegen displ, aufgeteilt in sieben Teilgrafiken, eine pro Fahrzeugklasse in mpg, in drei Spalten mit gemeinsamen Achsen

Beachten Sie an der obigen Abbildung Folgendes:

  • Alle Teilgrafiken (Panels) haben dieselbe Skala auf der x-Achse und der y-Achse.
  • Der Titel jeder Teilgrafik entspricht einer der Ausprägungen der kategorialen Variablen (class), die wir in facet_wrap() verwendet haben.

Facets funktionieren auch für numerische (numeric) oder ganzzahlige (integer) Variablen, wie das folgende Beispiel zeigt, in dem die Spalte displ (die numerisch ist) als Facet verwendet wird. Es ist jedoch selten sinnvoll, Facets für eine stetige Variable zu erstellen. Stetige Variablen haben oft viele Werte, was dazu führen kann, dass manche Teilgrafiken wenige oder gar keine Datenpunkte enthalten.

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1) +
  facet_wrap(~ displ)
Streudiagramm von hwy gegen displ mit einer kleinen Teilgrafik für jeden Wert von displ, viele Teilgrafiken mit wenigen Datenpunkten

Die Funktion facet_wrap() besitzt die Argumente nrow und ncol, mit denen sich die Anzahl der verwendeten Zeilen und Spalten steuern lässt. Im folgenden Beispiel legen wir fest, dass die Teilgrafiken in zwei Spalten angezeigt werden sollen:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point() +
  facet_wrap(~ class, ncol=2)
Streudiagramm von hwy gegen displ, aufgeteilt nach Fahrzeugklasse und mit facet_wrap und ncol=2 in zwei Spalten angeordnet

Im folgenden Beispiel legen wir fest, dass die Teilgrafiken in zwei Zeilen angezeigt werden sollen:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=2) +
  facet_wrap(~ class, nrow=2)
Streudiagramm von hwy gegen displ, aufgeteilt nach Fahrzeugklasse und mit facet_wrap und nrow=2 in zwei Zeilen angeordnet

Facet Grid: facet_grid()

Um zwei Variablen als Facets zu verwenden, nutzt man die Funktion facet_grid(). Die Variablen werden in diesem Fall mit einer tilde dazwischen angegeben. Vor ~ steht die Variable, die auf die Zeilen verteilt wird, und nach ~ die Variable, die die Spalten bildet, wie im folgenden Beispiel:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(cyl ~ class)
Raster aus Streudiagrammen hwy gegen displ mit der Anzahl der Zylinder (4, 5, 6, 8) in den Zeilen und der Fahrzeugklasse in den Spalten

Sie können einen Punkt (.) auf einer der beiden Seiten der Tilde (~) verwenden, um festzulegen, ob die Teilgrafiken zeilenweise oder spaltenweise angezeigt werden. Steht . vor ~, werden die Teilgrafiken spaltenweise angezeigt und umgekehrt:

## Zeilenweise Darstellung der Teilgrafiken
ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(. ~ class) +
  labs(title="Punkt innan ~ resulterar i radvis presentation")

## Spaltenweise Darstellung der Teilgrafiken
ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(class ~ .) +
  labs(title="Punkt efter ~ resulterar i kolumnvis presentation")
Streudiagramm von hwy gegen displ, in dem die Fahrzeugklassen als Zeilen untereinander gestapelt sind, erstellt mit facet_grid(class ~ .)
Streudiagramm von hwy gegen displ, in dem die Fahrzeugklassen in einer Zeile nebeneinander liegen, erstellt mit facet_grid(. ~ class)

Die Funktion facet_grid() akzeptiert zwei Variablen auf jeder Seite der Tilde (~), sodass sich Muster in weiteren Untergruppen erkennen lassen. Es folgt ein Beispiel, in dem die Panels in den Zeilen nach zwei Variablen (cyl und drv) stratifiziert werden:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(cyl + drv ~ class)
Raster aus Streudiagrammen hwy gegen displ mit Zeilen für Kombinationen aus Zylinderzahl und Antriebsart und Spalten für die Fahrzeugklasse

Funktionen in facet_wrap()

Sämtliche Argumente von facet_wrap() sind unten aufgeführt.

facet_wrap(
  facets,
  nrow = NULL,
  ncol = NULL,
  scales = "fixed",
  shrink = TRUE,
  labeller = "label_value",
  as.table = TRUE,
  switch = deprecated(),
  drop = TRUE,
  dir = "h",
  strip.position = "top"
)

Verwenden Sie den Befehl ?facet_grid(), um Erläuterungen zu jedem Argument zu erhalten. Die Erläuterungen zu facet_grid() und facet_wrap() sind leicht verständlich. Erstellen wir nun eine Grafik, in der die Skalen auf der x-Achse und der y-Achse frei sind und automatisch optimiert werden und in der der Titel jeder Teilgrafik links von der Grafik steht:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_wrap(~ class,
             # Anzahl der Spalten
             ncol=2,
             # Lässt die Skalen auf x-Achse und y-Achse frei
             scales="free",
             # Der Titel der Teilgrafik wird links platziert
             strip.position = "left"
             )
Streudiagramm von hwy gegen displ pro Fahrzeugklasse in zwei Spalten mit freien Achsenskalen und den Titeln der Teilgrafiken auf der linken Seite

Funktionen in facet_grid()

facet_grid(
  rows = NULL,
  cols = NULL,
  scales = "fixed",
  space = "fixed",
  shrink = TRUE,
  labeller = "label_value",
  as.table = TRUE,
  switch = NULL,
  drop = TRUE,
  margins = FALSE,
  facets = NULL
)

Facets vs. Panels (Teilgrafiken vs. Panels)

Facets sind nicht mit Abbildungspanels zu verwechseln. In einer Abbildung mit Facets bestehen die Teilgrafiken aus Untergruppen der Daten. In einer Abbildung mit Panels können die Teilgrafiken aus völlig unterschiedlichen Datensätzen bestehen. Abbildungen aus mehreren Panels werden mit anderen Packages erstellt. Die am häufigsten verwendeten Packages sind cowplot und gridExtra, die im nächsten Kapitel behandelt werden.