Facets (delgrafer)

Kategoriske variabler kan præsenteres med facets i ggplot2. En facet er en graf, der udgør en undergruppe i datasættet. Til at lave facets findes funktionerne facet_wrap() og facet_grid(). Den førstnævnte (facet_wrap()) bruges til at lave facets baseret på én variabel. Den sidstnævnte (facet_grid()) bruges til at lave facets baseret på to eller flere variabler. De variabler, der skal bruges som facets, angives efter tegnet tilde (~). I denne sammenhæng bruges betegnelsen facet om de enkelte grafer. Hver facet præsenterer en undergruppe i data og kan således betragtes som en delgraf. Facets skal, set fra et teknisk perspektiv, ikke forveksles med paneler, som omtales i næste kapitel.

Facet Wrap: facet_wrap()

I nedenstående figur bruges facet_wrap() med kolonnen class (som angiver, hvilken køretøjstype bilen tilhører). Det bør give separate grafer for hver køretøjsklasse.

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=3) +
  facet_wrap(class ~ .)
Punktdiagram af hwy mod displ opdelt i syv delgrafer, én pr. køretøjsklasse i mpg, i tre kolonner med fælles akser

Bemærk følgende ved figuren ovenfor:

  • Alle delgrafer (paneler) har samme skala på x-aksen og y-aksen.
  • Titlen i hver delgraf svarer til et af niveauerne for den kategoriske variabel (class), vi brugte i facet_wrap().

Facets fungerer også for variabler, der er numeriske (numeric) eller heltal (integer), hvilket fremgår af eksemplet nedenfor, hvor kolonnen displ (som er numerisk) bruges som facet. Det er dog sjældent meningsfuldt at lave facets for en kontinuert variabel. Kontinuerte variabler har ofte mange værdier, hvilket kan medføre, at nogle delgrafer har få eller ingen datapunkter.

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1) +
  facet_wrap(~ displ)
Punktdiagram af hwy mod displ med en lille delgraf for hver værdi af displ, mange delgrafer med få datapunkter

Funktionen facet_wrap() har argumenterne nrow og ncol, som styrer antallet af rækker og kolonner, der bruges. I følgende eksempel angiver vi, at delgraferne skal vises i to kolonner:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point() +
  facet_wrap(~ class, ncol=2)
Punktdiagram af hwy mod displ opdelt pr. køretøjsklasse og ordnet i to kolonner med facet_wrap og ncol=2

I følgende eksempel angiver vi, at delgraferne skal vises i to rækker:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=2) +
  facet_wrap(~ class, nrow=2)
Punktdiagram af hwy mod displ opdelt pr. køretøjsklasse og ordnet i to rækker med facet_wrap og nrow=2

Facet Grid: facet_grid()

For at bruge to variabler som facets anvendes funktionen facet_grid(). Variablerne angives i dette tilfælde med tilde mellem dem. Før ~ angives den variabel, der placeres i rækkerne, og efter ~ angives den variabel, der udgør kolonnerne, som i følgende eksempel:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(cyl ~ class)
Gitter af punktdiagrammer hwy mod displ med antal cylindre (4, 5, 6, 8) i rækkerne og køretøjsklasse i kolonnerne

Du kan bruge et punktum (.) på en af siderne af tilde (~) til at bestemme, om delgraferne skal vises rækkevis eller kolonnevis. Hvis . angives før ~, vises delgraferne kolonnevis og omvendt:

## Rækkevis præsentation af delgrafer
ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(. ~ class) +
  labs(title="Punkt innan ~ resulterar i radvis presentation")

## Kolonnevis præsentation af delgrafer
ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(class ~ .) +
  labs(title="Punkt efter ~ resulterar i kolumnvis presentation")
Punktdiagram af hwy mod displ, hvor køretøjsklasserne stables som rækker under hinanden, lavet med facet_grid(class ~ .)
Punktdiagram af hwy mod displ, hvor køretøjsklasserne ligger ved siden af hinanden i én række, lavet med facet_grid(. ~ class)

Funktionen facet_grid() accepterer to variabler på hver side af tilde (~), hvilket gør det muligt at se mønstre i yderligere undergrupper. Nedenfor følger et eksempel, hvor panelerne i rækkerne stratificeres efter to variabler (cyl og drv):

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(cyl + drv ~ class)
Gitter af punktdiagrammer hwy mod displ med rækker for kombinationer af cylindre og træk og kolonner for køretøjsklasse

Funktioner i facet_wrap()

Samtlige argumenter i facet_wrap() fremgår nedenfor.

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

Brug kommandoen ?facet_grid() for at få en vejledning til hvert argument. Vejledningen er let at forstå for facet_grid() og facet_wrap(). Lad os lave en graf, hvor skalaerne på x-aksen og y-aksen er frie og optimeres automatisk, og hvor hver delgrafs titel placeres til venstre for grafen:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_wrap(~ class,
             # Antal kolonner
             ncol=2,
             # Lader skalaerne på x-aksen og y-aksen være frie
             scales="free",
             # Delgrafens titel placeres til venstre
             strip.position = "left"
             )
Punktdiagram af hwy mod displ pr. køretøjsklasse i to kolonner med frie akseskalaer og delgrafernes titler til venstre

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 (delgrafer vs. paneler)

Facets skal ikke forveksles med figurpaneler. I en figur med facets består delgraferne af undergrupper i data. I en figur med paneler kan delgraferne bestå af helt forskellige datasæt. Figurer, der består af flere paneler, laves med andre pakker. De mest anvendte pakker er cowplot og gridExtra, som diskuteres i det følgende kapitel.