Facets (subgrafer)

Kategoriske variabler kan presenteres med facets i ggplot2. En facet er en graf som utgjør en undergruppe i datasettet. For å lage facets finnes funksjonene facet_wrap() eller facet_grid(). Førstnevnte (facet_wrap()) brukes til å lage facets basert på én variabel. Sistnevnte (facet_grid()) brukes til å lage facets basert på to eller flere variabler. Variablene som skal brukes som facets, angis etter tegnet tilde (~). I denne sammenhengen brukes termen facet om de enkelte grafene. Hver facet presenterer en undergruppe i dataene og kan dermed betraktes som en subgraf. Facets skal, fra et teknisk perspektiv, ikke forveksles med paneler, som omtales i neste kapittel.

Facet Wrap: facet_wrap()

I figuren nedenfor brukes facet_wrap() med kolonnen class (som angir hvilken kjøretøytype bilen tilhører). Dette bør gi separate grafer for hver kjøretøyklasse.

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=3) +
  facet_wrap(class ~ .)
Spredningsdiagram av hwy mot displ delt opp i sju subgrafer, én per kjøretøyklasse i mpg, i tre kolonner med felles akser

Legg merke til følgende i figuren ovenfor:

  • Alle subgrafer (paneler) har samme skala på x-aksen og y-aksen.
  • Tittelen i hver subgraf tilsvarer ett av nivåene for den kategoriske variabelen (class) vi brukte i facet_wrap().

Facet fungerer også for variabler som er numeriske (numeric) eller heltall (integer), noe som fremgår av eksemplet nedenfor, der kolonnen displ (som er numerisk) brukes som facet. Det er imidlertid sjelden meningsfullt å lage facets for en kontinuerlig variabel. Kontinuerlige variabler har ofte mange verdier, noe som kan føre til at noen subgrafer har få eller ingen datapunkter.

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1) +
  facet_wrap(~ displ)
Spredningsdiagram av hwy mot displ med en liten subgraf for hver verdi av displ, mange subgrafer med få datapunkter

Funksjonen facet_wrap() har argumentene nrow og ncol, som styrer antall rader og kolonner som brukes. I følgende eksempel angir vi at subgrafene skal vises i to kolonner:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point() +
  facet_wrap(~ class, ncol=2)
Spredningsdiagram av hwy mot displ delt opp per kjøretøyklasse og ordnet i to kolonner med facet_wrap og ncol=2

I følgende eksempel angir vi at subgrafene skal vises på to rader:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=2) +
  facet_wrap(~ class, nrow=2)
Spredningsdiagram av hwy mot displ delt opp per kjøretøyklasse og ordnet på to rader med facet_wrap og nrow=2

Facet Grid: facet_grid()

For å bruke to variabler som facets brukes funksjonen facet_grid(). Variablene angis i dette tilfellet med tilde mellom seg. Foran ~ angis variabelen som plasseres på radene, og etter ~ angis variabelen som utgjør kolonnene, som i følgende eksempel:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(cyl ~ class)
Rutenett av spredningsdiagrammer hwy mot displ med antall sylindre (4, 5, 6, 8) på radene og kjøretøyklasse på kolonnene

Du kan bruke et punktum (.) på en av sidene av tilde (~) for å bestemme om subgrafene skal vises radvis eller kolonnevis. Hvis . angis foran ~, vises subgrafene kolonnevis, og omvendt:

## Radvis presentasjon 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")

## Kolonnevis presentasjon 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")
Spredningsdiagram av hwy mot displ der kjøretøyklassene stables som rader under hverandre, laget med facet_grid(class ~ .)
Spredningsdiagram av hwy mot displ der kjøretøyklassene ligger ved siden av hverandre i én rad, laget med facet_grid(. ~ class)

Funksjonen facet_grid() aksepterer to variabler på hver side av tilde (~), noe som gjør det mulig å se mønstre i ytterligere undergrupper. Nedenfor følger et eksempel der panelene på radene stratifiseres på to variabler (cyl og drv):

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_grid(cyl + drv ~ class)
Rutenett av spredningsdiagrammer hwy mot displ med rader for kombinasjoner av sylindre og drivverk og kolonner for kjøretøyklasse

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

Bruk kommandoen ?facet_grid() for å få instruksjoner for hvert argument. Instruksjonene er lette å forstå for facet_grid() og facet_wrap(). La oss lage en graf der skalaene på x-aksen og y-aksen er frie og optimaliseres automatisk, og der tittelen til hver subgraf havner til venstre for grafen:

ggplot(data=mpg, aes(x = displ,
                     y = hwy)) +
  geom_point(size=1.5) +
  facet_wrap(~ class,
             # Antall kolonner
             ncol=2,
             # Lar skalaene på x-aksen og y-aksen være frie
             scales="free",
             # Subgrafens tittel plasseres til venstre
             strip.position = "left"
             )
Spredningsdiagram av hwy mot displ per kjøretøyklasse i to kolonner med frie akseskalaer og subgrafenes titler til venstre

Funksjoner 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 skal ikke forveksles med figurpaneler. I en figur med facets består subgrafene av undergrupper i dataene. I en figur med paneler kan subgrafene bestå av helt ulike datasett. Figurer som består av flere paneler, lages med andre pakker. De mest brukte pakkene er cowplot og gridExtra, som diskuteres i neste kapittel.