Facets (subgrafer)

Kategoriska variabler kan presenteras med facets i ggplot2. En facet är en graf som utgör en subgrupp i datamängden. För att skapa facets finns funktionerna facet_wrap() eller facet_grid(). Förstnämnda (facet_wrap()) används för att skapa facets baserat på en variabel. Sistnämnda (facet_grid()) används för att skapa facets baserat på två eller fler variabler. Variablerna som skall användas som facets specificeras efter tecknet tilde (~). I detta sammanhang används termen facet för de enskilda graferna. Vare facet presenterar en subgrupp i data och kan således betraktas som en subgraf. Facets skall, ur ett tekniskt perspektiv, inte förväxlas med panaler som omtalas i nästa kapitel.

Facet Wrap: facet_wrap()

I nedanstående figur används facet_wrap() med kolumnen class (som indikerar vilken fordonstyp bilen tillhör). Det borde skapa separata grafer för varje fordonsklass.

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=3) +
  facet_wrap(class ~ .)
Spridningsdiagram av hwy mot displ uppdelat i sju subgrafer, en per fordonsklass i mpg, i tre kolumner med gemensamma axlar

Notera följande av figuren ovan:

  • Alla subgrafer (paneler) har samma skala på x-axel och y-axel.
  • Titeln i varje subgraf motsvarar en av nivåerna för den kategoriska variabeln (class) vi använde i facet_wrap().

Facet funger även för variabler som är numeriska (numeric) eller heltal (integer), vilket framgår av exemplet nedan där kolumnen displ (som är numerisk) används som facet. Det är dock sällan meningsfullt att skapa facets för en kontinuerlig variabel. Kontinuerliga variabler har ofta många värden vilket kan resultera i att vissa subgrafer har få eller inga datapunkter.

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1) +
  facet_wrap(~ displ)
Spridningsdiagram av hwy mot displ med en liten subgraf för varje värde på displ, många subgrafer med få datapunkter

Funktionen facet_wrap() har argumenten nrow och ncol vilka styr antal rader och kolumner som används. I följande exempel anger vi att subgraferna skall visas i två kolumner:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point() +
  facet_wrap(~ class, ncol=2)
Spridningsdiagram av hwy mot displ uppdelat per fordonsklass och ordnat i två kolumner med facet_wrap och ncol=2

I följande exempel anger vi att subgraferna skall visas på två rader:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=2) +
  facet_wrap(~ class, nrow=2)
Spridningsdiagram av hwy mot displ uppdelat per fordonsklass och ordnat på två rader med facet_wrap och nrow=2

Facet Grid: facet_grid()

För att använda två variabler som facets används funktionen facet_grid(). Variablerna anges i detta fall med tilde mellan dem. Innan ~ anges variabeln som placeras på raderna och efter ~ anges variabeln som utgör kolumnerna, enligt följande exempel:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(cyl ~ class)
Rutnät av spridningsdiagram hwy mot displ med antal cylindrar (4, 5, 6, 8) på raderna och fordonsklass på kolumnerna

Du kan använda en punkt (.) på endera sida av tilde (~) för att bestämma om subgraferna skall visas radvis eller kolumnvis. Om . anges innan ~ visas subgraferna kolumnvis och vice versa:

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

## Kolumnvis presentation av subgrafer
ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(class ~ .) +
  labs(title="Punkt efter ~ resulterar i kolumnvis presentation")
Spridningsdiagram av hwy mot displ där fordonsklasserna staplas som rader under varandra, skapat med facet_grid(class ~ .)
Spridningsdiagram av hwy mot displ där fordonsklasserna ligger bredvid varandra i en rad, skapat med facet_grid(. ~ class)

Funktionen facet_grid() accepterar två variabler på endera sida av tilde (~), vilket möjliggör att se mönster i ytterligare subgrupper. Nedan följer ett exempel där panelerna på raderna stratifieras på två variabler (cyl och drv):

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(cyl + drv ~ class)
Rutnät av spridningsdiagram hwy mot displ med rader för kombinationer av cylindrar och drivning och kolumner för fordonsklass

Funktioner i facet_wrap()

Samtliga argument i facet_wrap() framgår nedan.

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"
)

Använd kommandot ?facet_grid() för att få instruktioner för varje argument. Instruktionerna är lätta att förstå för facet_grid() och facet_wrap(). Låt oss skapa en graf där skalorna på x-axeln och y-axeln är fria och optimeras automatiskt, samt där varje subgrafs titel hamnar till vänster om grafen:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_wrap(~ class,
             # Antal kolumner
             ncol=2,
             # Låter skalorna på x-axel och y-axel vara fria
             scales="free",
             # Subgrafens titel placeras till vänster
             strip.position = "left"
             )
Spridningsdiagram av hwy mot displ per fordonsklass i två kolumner med fria axelskalor och subgrafernas titlar till vänster

Funktioner i 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 (subgrafer vs. paneler)

Facets ska inte förväxlas med figurpaneler. I en figur med facets består subgraferna av subgrupper i data. I en figur med paneler kan subgraferna bestå av helt olika datamängder. Figurer som består av flera paneler skapas med andra paket. De mest använda paketen är cowplot och gridExtra, som diskuteras i nästkommande kapitel.