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 4
Startad

Estetisk mappning

Avsnitt Progress
0% färdig

När du aktiverade tidyverse så fick du även tillgång till en data frame kallad mpg, som är förkortning för miles per gallon. Denna innehåller data på bilars bränsleförbrukning och är användbar för nedanstående övningar. Dessa data samlades in av US EPA (Environmental Protection Agency) och inkluderade 38 olika bilmodeller (https://fueleconomy.gov/).

Om du inte redan har tidyverse installeras det med följande kommando:

R
install.packages("tidyverse")

Aktivera tidyverse:

R
library(tidyverse)

Se första raderna i data:

R
mpg
manufacturermodeldisplyearcyltransdrvctyhwyfl
audia41.819994auto(l5)f1829p
audia41.819994manual(m5)f2129p
audia42.020084manual(m6)f2031p
audia42.020084auto(av)f2130p
audia42.819996auto(l5)f1626p
audia42.819996manual(m5)f1826p
audia43.120086auto(av)f1827p
audia4 quattro1.819994manual(m5)41826p
audia4 quattro1.819994auto(l5)41625p
audia4 quattro2.020084manual(m6)42028p
Första raderna i mpg.

mpg data

I mpg data finns 234 rader och följande 11 variabler:

  • manufacturer: manufacturer name
  • model: model name
  • displ: engine displacement, in litres
  • year: year of manufacture
  • cyl: number of cylinders
  • trans: type of transmission
  • drv: the type of drive train, where f = front-wheel drive, r = rear wheel drive, 4 = 4wd
  • cty: city miles per gallon
  • hwy: highway miles per gallon
  • fl: fuel type
  • class: "type" of car

För att koden i nedanstående övningar skall vara kortfattad kommer vi inte specificera några labels med labs() innan grafen är klar. I exemplet nedan skapar vi en graf med ggplot(). I ggplot() specificerar vi att data kommer från mpg och vi använder aes() för att mappa displ till x-axeln och hwy till y-axeln. Därefter lägger adderar vi geom_point() som visualiserar värdena på x och y med punkter. Vi behöver inte ange estetisk mappning (aes()) i geom_point() eftersom den kommer nedärvas från ggplot() automatiskt.

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

Du har precis skådat ggplot() skönhet, nämligen förmågan att bygga upp en graf med hjälp av lager. Ovanstående graf har bara ett enda lager, nämligen geom_point().

Estetisk mappning (aesthetic mapping)

Genom att bygga upp en graf med lager kan vi styra vilka data som visas i varje lager. I nästa graf skapar vi separata punkter för bilar som förbrukar mer respektive mindre än medelvärdet för bränsleförbrukningen (hwy). Notera att vi inte specificerar aes() i ggplot() utan istället i varje geom_point().

R
# Beräkna medelvärdet för bränsleförbrukning (hwy)
median_hwy <- median(mpg$hwy)

# Skapa grafen
ggplot() + 
  # Bilar som föbrukar mer eller lika med medianvärdet
  geom_point(data = filter(mpg, hwy>=median_hwy),
             aes(x = displ, y = hwy),
             color="gold1",
             size=2) +
  # Bilar som föbrukar mindre än medianvärdet
  geom_point(data = filter(mpg, hwy<median_hwy),
             aes(x = displ, y = hwy),
             color="cyan4",
             size=2)

Därefter lägger vi till en horisontell linje som visar var medelvärdet är på y-axeln. Detta görs med geom_hline() på rad 16.

R
# Beräkna medelvärdet för bränsleförbrukning (hwy)
median_hwy <- median(mpg$hwy)

# Skapa grafen
ggplot() + 
  # För bilar som föbrukar mer eller lika med medianvärdet
  geom_point(data = filter(mpg, hwy>=median_hwy),
             aes(x = displ, y = hwy),
             color="gold1",
             size=2) +
  # För bilar som föbrukar mindre än medianvärdet
  geom_point(data = filter(mpg, hwy<median_hwy),
             aes(x = displ, y = hwy),
             color="cyan4",
             size=2) +
  geom_hline(yintercept=median_hwy)

Vi fortsätter genom att lägga till text (med geom_label())som visar medianvärdet på den horisontella linjen. Texten ska placeras längst till vänster på x-axeln och på medianvärdet på y-axeln. I funktionen geom_label() finns argumentet label som utgörs av texten ska visas på grafen, och i detta fall är detta helt enkelt medianvärdet (rad 17). Notera nedan att vi specificerar "längst till vänster" på x-axeln genom att skriva x=-Inf (negative infinity). Om vi önskar placera något längst till höger på x-axeln anger vi istället x=Inf. På så vis behöver vi inte själva identifiera minsta och största värdet på x-axeln.

R
# Beräkna medelvärdet för bränsleförbrukning (hwy)
median_hwy <- median(mpg$hwy)

# Skapa grafen
ggplot() + 
  # För bilar som föbrukar mer eller lika med medianvärdet
  geom_point(data = filter(mpg, hwy>=median_hwy),
             aes(x = displ, y = hwy),
             color="gold1",
             size=2) +
  # För bilar som föbrukar mindre än medianvärdet
  geom_point(data = filter(mpg, hwy<median_hwy),
             aes(x = displ, y = hwy),
             color="cyan4",
             size=2) +
  geom_hline(yintercept=median_hwy) +
  geom_label(aes(x=-Inf, y=median_hwy), label=median_hwy)

Horisontell och vertikal justering (hjust, vjust)

Tyvärr hamnade en del av etiketten utanför grafen, vilket framgår av figuren ovan. Lyckligtvis har de flesta geom() även argumentet hjust och vjust som gör det möjligt att förskjuta en komponent (t ex en datapunkt eller en etikett) horisontellt eller vertikalt. Det kan inledningsvis vara lite krångligt att förstå hur hjust och vjust förskjuter komponenter men följande lathund underlättar mycket:

Av ovanstående framgår att hjust=0 och vjust=0.5 borde förskjuta etiketten till höger på x-axeln. Låt oss prova detta (rad 17):

R
# Beräkna medelvärdet för bränsleförbrukning (hwy)
median_hwy <- median(mpg$hwy)

# Skapa grafen
ggplot() + 
  # För bilar som föbrukar mer eller lika med medianvärdet
  geom_point(data = filter(mpg, hwy>=median_hwy),
             aes(x = displ, y = hwy),
             color="gold1",
             size=2) +
  # För bilar som föbrukar mindre än medianvärdet
  geom_point(data = filter(mpg, hwy<median_hwy),
             aes(x = displ, y = hwy),
             color="cyan4",
             size=2) +
  geom_hline(yintercept=median_hwy) +
  geom_label(aes(x=-Inf, y=median_hwy), label=median_hwy, hjust=0, vjust=0.5)

Koden justeras nu så att den estetiska mappningen (aes()) sker i ggplot(). I mpg finns kolumnen class som redovisar vilken typ av bil det är. Vi vill använda class för att färga datapunkterna. Detta gör vi genom att specificera att color=class i aes(). Syftet med detta är att undersöka om det finns ett samband mellan vilken klass bilen tillhör och bränsleförbrukningen (mwy).

R
ggplot(data=mpg, aes(x = displ,
                     y = hwy,
                     color=class)) + 
  geom_point()
  
# Du kan skriva "color" eller "colour", båda varianterna accepteras

Den estetiska mappningen i aes() påverkar alltså alla datapunkterna. I exemplet ovan specificerade vi att datpunkterna skulle få en unik färg för varje nivå i kolumnen class. Färgens betydelse redovisas till höger om figuren. Notera att färgförklaringen till höger har rubriken "class" vilket är kolumnen som specificerades i color.

Vi fortsätter att modifiera grafen genom att lägga till ytterligare information. Vi önskar nu att storleken på varje datapunkt skall vara en funktion av antalet cylindrar i motorn. Då mappar vi variabeln cyl till parametern size i aes():

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

Det verkar som att det finns ett starkt samband mellan antalet cylindrar och storleken på motorn (displ) samt bränsleförbrukningen (hwy). Bilar med låg bränsleförbrukning har liten motor (displ) och färre cylindrar (cyl). Notera också att det finns en storleksskala till höger om grafen och den har rubriken cyl, vilket vi mappade till size i aes(). I detta fall går det utmärkt att mappa cyl till size eftersom cyl är en numerisk variabel som går att rangordna.

Shape (form) och alpha (genomskinlighet, transparency)

I aes() kan man även specificera alpha som styr punkternas genomskinlighet, och shape som styr punkternas form. Du kan ange ett specifikt värde på alpha (t ex alpha=0.5 för 50% genomskinlighet) och shape (t ex shape=2 för att använda trianglar istället för punkter). Alternativt mappar du en kolumn till alpha och shape, vilket medför att ggplot() automatiskt mappar detta. Vi provar nu att mappa cyl till alpha:

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

Notera ovan att cyl nu används för att mappa punkternas storlek och genomskinlighet, och detta framgår också av förklaringen till höger om grafen. Vi provar nu mappa shape till cyl:

Vi provar nu att mappa class till shape. Vi justerar också storleken på punkterna genom att ange size=3, enligt följande:

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

Du kan visualisera alla punkterna med en specifik shape (form). Det görs genom att manuellt ange shape i geom_point(). Du skall inte ange detta i aes(), utan som ett argument i geom_point(), enligt följande exempel där alla punkterna får shape=2, vilket är trianglar:

R
ggplot(data=mpg, aes(x = displ,
                     y = hwy,
                     color=class)) + 
  geom_point(size=3, shape=2)

Du kan specificera shape, color och size genom att mappa dessa egenskaper till variabler i din data frame, eller ange specifika värden. Följande gäller för shape, color och size:

EgenskapFunktionKan specificeras med en variabelKan specificeras manuellt
shapeÄndrar formen på geom_point().Ja.
Tilldelar varje nivå (max 6 olika) en separat form.
Exempel: shape=class
Ja.
Exempel: shape=2
sizeÄndrar storleken på geom_point().
Anges i millimeter (mm).
Nej.Ja, med numeriskt värde.
colorÄndrar färg på geom_point().Ja.
Exempel: shape=class
Ja, med textsträng eller HEX-kod.
Exempel textsträng: color="blue"
Exempel HEX: color="#33333"

Vad beträffar shape visar nedanstående lathund formerna och deras motsvarande siffra.