Gå till index

Analys med R

0% färdig
0/0 Steps
  1. Analys och forskning med R och Posit (Rstudio)
  2. Grunderna i R och Rstudio
    7 Ämnen
  3. Importera, exportera, spara och ladda data
    5 Ämnen
  4. Strängar och regular expressions (regex)
    1 Ämne
  5. Bearbetning av data med dplyr
    12 Ämnen
  6. Visualisera och presentera
    14 Ämnen
  7. Explorerande analyser
    6 Ämnen
  8. Prediktionsmodeller
    12 Ämnen
  9. Klassisk regressionsanalys
    8 Ämnen
  10. Machine learning (ML) och Artificiell Intelligens (AI)
    9 Ämnen
  11. Prediktionsmodeller: Tidymodels
  12. Hypotestester
    1 Ämne
Avsnitt 6, Ämne 10
Startad

Scales, axlar, legends (guides)

Avsnitt Progress
0% färdig

I ggplot2 finns automatiska funktioner som optimerar skalor för x-axel, y-axel, color, fill, och figurförklaringar (eng. figure legends). Genom att justera skalor kan vi modifiera utseendet på x-axel och y-axel. Skalor används också för att modifiera figurförklaringars innehåll. Det innebär att skalor används för att modifiera både axlar och figurförklaringar. Tillsammans kallas axlarna och figurförklaringarna för figurens guides.

I detta kapitel kommer vi använda data från undersökningen mpg. Säkerställ att tidyverse är aktiverat, vilket resulterar i att även ggplot2 och mpg är aktiverat:

R
library(tidyverse)

# Inspektera första 5 raderna i mpg
head(mpg)
manufacturer
<chr>
model
<chr>
displ
<dbl>
year
<int>
cyl
<int>
trans
<chr>
drv
<chr>
cty
<int>
hwy
<int>
fl
<chr>
audia41.819994auto(l5)f1829p
audia41.819994manual(m5)f2129p
audia42.020084manual(m6)f2031p
audia42.020084auto(av)f2130p
audia42.819996auto(l5)f1626p
audia42.819996manual(m5)f1826p
mpg data.

I följande exempel skapas en graf med x-axel, y-axel och färgkodning (color) baserat på kolumnen class:

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=class)) +
  geom_point()

Av ovanstående graf framgår att ggplot() automatiskt skapat en skala för x-axel, y-axel och en skala för färgerna på datapunkterna. Detta gör ggplot() med funktionerna scale_x_continuous(), scale_y_continuous() och scale_colour_discrete(). Vi behöver inte specificera dessa funktioner i koden ovan eftersom ggplot() gör det automatiskt. Om vi lägger till dessa funktioner får vi en identisk graf:

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=class)) +
  geom_point() +
  scale_x_continuous() +
  scale_y_continuous() +
  scale_colour_discrete()

Dessa funktioner och deras namn tolkas som följer:

FunktionFörklaring
scale_x_continuous()Modifierar en kontinuerlig (numerisk) x-axel.
I ovanstående exempel modifieras skalan för displ.
scale_x_continuous()Modifierar en kontinuerlig (numerisk) y-axel.
I ovanstående exempel modifieras skalan för hwy.
scale_colour_discreteModifierar colour (color) argument som är en diskret variabel.
I ovanstående exempel modifieras skalan för class.

Andra scale-funktioner används på samma sätt och följer samma princip för namngivning:

  • Om x-axeln är en numerisk variabel så justeras den med scale_x_continuous().
  • Om y-axeln är en numerisk variabel så justeras den med scale_y_continuous().
  • Om x-axeln är en kategorisk variabel så justeras den med scale_x_discrete().
  • Om y-axeln är en kategorisk variabel så justeras den med scale_y_discrete().
  • Om color är en kategorisk variabel så justeras den med scale_color_continuous().
  • Om color är en kategorisk variabel så justeras den med scale_color_discrete().

Guides: axlar och legends

Figurens guides (sv. guider) består av axlarnas (x, y) skala och figurförklaringarna. Axlar och figurförklaringar (legends) modifieras med argumenten som följer:

  • breaks: modifierar vilka siffror som visas på en axel, respektive vilka kategorier som visas i en figurförklaring.
  • labels: modifierar labels som visas på en axel eller i en figurförklaring.
  • limits: modifierar axlarnas intervall.

Axlar (x, y)

Vi fortsätter på föregående graf, där vi nu tar bort x-axelns och y-axelns skala. Detta görs genom att deklarera breaks=NULL, enligt följande:

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=class)) +
  geom_point() +
  scale_x_continuous(breaks = NULL) +
  scale_y_continuous(breaks = NULL)

I första figuren såg vi att x-axeln går från 2 till 7 med intervaller på 1,0. Vi ändrar skalan så den går från 2 till 7 med med intervaller på 0,5. Detta görs genom att breaks får en sekvens (med funktionen seq()) från 2 till 7 med 0.5 mellanrum, enligt följande:

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=class)) +
  geom_point() +
  scale_x_continuous(breaks = seq(from=2, to=7, by=0.5))

I nästa exempel ändrar vi så att x-axelns begränsning utökas från 0 till 15:

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=class)) +
  geom_point() +
  scale_x_continuous(breaks = seq(from=2, to=7, by=.5),
                     limits = c(0, 10))

I nästa exempel begränsar vi x-axeln till intervallet 1 till 5 och vi ersätter siffrorna med nya labels, nämligen de första fem bokstäverna:

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=class)) +
  geom_point() +
  scale_x_continuous(breaks = seq(1, 5, by=1),
                     limits = c(1, 5),
                     labels = c("A", "B", "C", "D", "E"))

Figurförklaringar (legends)

Som nämnt ovan har breaks och limits även effekt på figurförklaringar. Själva figurförklaringen skapas utifrån den estetiska mappningen. I nedanstående exempel används color=class i aes(). För att modifiera denna skalan använder vi funktionen scale_color_discrete(). Vi anger att breaks endast inenhåller "pickup" och den får labeln "Pickup car".

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=class)) +
  geom_point() +
  scale_color_discrete(breaks=c("pickup"),
                       labels=c("Pickup car"))

På så vis kan även ordningen i figurförklaringen justeras.

Position på figurförklaring (figur legends)

Placeringen av figurförklaring påverkar inte data som presenteras i grafen. Sådana komponenter justeras med theme(). Figurförklaringen kan positioneras var som helst i figuren. Nedan följer flera exempel med justeringar av förklaringens position.

I första exemplet tar vi bort figurförklaringen med argumentet legend.position = "none".

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=class)) +
  geom_point() +
  theme(legend.position = "none")

Argumentet legend.position accepterar även specifikationerna "bottom", "top", "right", "left". Detta demonstreras nu med "bottom" som val:

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=class)) +
  geom_point() +
  theme(legend.position = "bottom")

Andra alternative placeringar med textsträngar följer:

  • theme(legend.position = "top")
  • theme(legend.position = "bottom")
  • theme(legend.position = "left")
  • theme(legend.position = "right")

Du kan också positionera legends med koordinater, där både x- och y-axeln går från 0 till 1. För att få legends positionerad längst ner till höger är koordinaterna x=1 och y=0, vilket anges i en numerisk vektor (c(1, 1)).

Du kan också positionera legends med koordinater, där både x- och y-axeln går från 0 till 1. För att få legends positionerad längst upp till höger är koordinaterna x=1 och y=1, vilket anges i en numerisk vektor (c(1, 1)). I theme() har legend ytterligare argument (legend.justification, legend.margin, etc) som vi också kommer använda här nedan för att optimera läget på legend. I koden följer kommentarer som förklarar vad varje argument gör.

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=class)) +
  geom_point() +
  theme(
    # Legend positioneras högst upp till höger
    legend.position = c(1, 1),
    
    # Legend tillåts inte gå utanför grafens begränsning
    legend.justification = c("right", "top"),
    
    # Margin skapar en marginal mellan legend och dess omgivning.
    # 10 mm margin används på alla 4 kanter
    legend.margin = margin(10, 10, 10, 10),
    
    # Bakgrunden tas bort genom att specificera det som ett blankt element
    legend.background = element_blank())
Med guides() är det möjligt att justera enskilda legends i en figur. Låt oss justera läget och utseendet på legends för biltillverkare (manufacturer) ovan. Detta gör vi genom ett ändra antal rader (nrow) som legends presenteras på, samt storleken (size) på formerna i legends.
R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=manufacturer,
                shape=drv)) +
  geom_point(size=3) +
  
  # Placera legends ovanför grafen
  theme(legend.position = "top") +
  
  # Ändrar enskilda legends
  guides(colour = guide_legend(nrow = 3, #antal rader
                               override.aes = list(size = 4), # storlek på förklaringarna
                               order = 2), # ordningsföljden
         shape = guide_legend(nrow = 3,
                              override.aes = list(size = 4),
                              order = 1))

Vi kan använda guides() för att dölja en enskild legends. Här nedan döljer vi legends för shapes och vi byter label för legend för color till "Biltillverkare".

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=manufacturer,
                shape=drv)) +
  geom_point() +
  theme(legend.position = "top") +
  guides(colour = guide_legend(title="Biltillverkare",
                               nrow = 3,
                               override.aes = list(size = 5)),
         # Dölj legend för shape
         shape = "none")

Ersätta eller transformera en skala

En numerisk skala kan transformeras för att tydligare åskådliggöra samband i data. I nästa exempel använder vi data från gapminder för att visualisera hur befolkningsmängd (pop) och förväntad livslängd (lifeExp) korrelerar. Vi gör detta med och utan logaritmering av axlarna. För att placera figurerna bredvid varandra skickar vi ggplot()-objekten till två nya objekt (plot_1, plot_2) som vi sedan använder i plot_grid() från paketet cowplot.

R
library(gapminder)

# Utan logaritm
plot_1 <- ggplot(gapminder, aes(x=pop,
                                y=lifeExp,
                                color=year)) +
  geom_point() +
  labs(title="Utan logaritmerade axlar") +
  theme(legend.position = "bottom")

# Med logaritm
plot_2 <- ggplot(gapminder, aes(x=pop,
                                y=lifeExp,
                                color=year)) +
  geom_point() +
  scale_x_log10() + 
  scale_y_log10() +
  labs(title="Med logaritmerade axlar") +
  theme(legend.position = "bottom")

library(cowplot)
plot_grid(plot_1, plot_2)

Ändra färgskala och färgpalett

R Colorbrewer

Scale används också för att färga diskreta variabler. I ggplot finns inbyggda färgpaletter där färgerna valts med omsorg. Därutöver finns andra färgpaletter med mer specifika syften. Exempelvis finns R ColorBrewer som består av ett antal färgpaletter som är särskilt lämpliga för färgblinda. För att se alla färgpaletterna i R ColorBrewer skriver du följande kommando:

R
RColorBrewer::display.brewer.all()

Du kan använda dessa färgpaletter i ggplot genom funktionen scale_color_brewer(). Som framgår av ovanstående figur finns en färgpalette som heter "Set3". Nedan använder vi "Set3" i scale_color_brewer().

R
ggplot(mpg, aes(x=displ,
                y=hwy,
                color=class)) +
  geom_point() +
  scale_color_brewer(palette = "Set1")

https://colorbrewer2.org/ kan du läsa mer om ColorBrewer.

Viridis

I paketet viridis finns scale_color_viridis() och scale_fill_viridis() vilka kan användas både för kontinuerliga och diskreta variabler. För kontinuerliga variabler är viridis att föredra framför ColorBrewer.

R
library(viridis)

# Viridis standardfärger
ggplot(gapminder, aes(x=pop,
                      y=lifeExp,
                      color=year)) +
  geom_point() +
  scale_color_viridis_c()

# Viridis plasma
ggplot(gapminder, aes(x=pop,
                      y=lifeExp,
                      color=year)) +
  geom_point() +
  scale_color_viridis_c(option = "plasma")

Manuella färgskalor

Om de inbyggda färgpaletterna och paletter i paket som exempelvis viridis inte passar kan du skapa färgpaletten manuellt. Detta görs med scale_colour_manual() eller scale_fill_manual(). Här följer ett exempel där scale_colour_manual() används för att manuellt skapa färger åt bilar baserat på class.

R
ggplot(gapminder, aes(x=pop,
                y=lifeExp,
                color=continent)) +
  geom_point() +
    scale_colour_manual(values = c(Africa="darkblue",
                                   Asia="pink",
                                   Europe="green",
                                   Oceania="purple",
                                   Americas="cyan"))

Med funktionerna scale_fill_gradient2() och scale_colour_gradient2() kan kontinuerliga variabler få en färgradient med en mittpunkt. I exemplet nedan används scale_colour_gradient2() för att färga datapunkter efter år 1980 med svarta punkter och datapunkter innan 1980 med gula punkter, med en gradient från 1980 i båda fallen. Notera att även axlarna är logaritmerade.

R
ggplot(gapminder, aes(x=pop,
                      y=lifeExp,
                      color=year)) +
  geom_point() +
  scale_colour_gradient2(midpoint=1980,
                         high = "black",
                         low = "gold") +
  scale_x_log10() +
  scale_y_log10()