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:
install.packages("tidyverse")
Aktivera tidyverse
:
library(tidyverse)
Se första raderna i data:
mpg
manufacturer | model | displ | year | cyl | trans | drv | cty | hwy | fl |
---|---|---|---|---|---|---|---|---|---|
audi | a4 | 1.8 | 1999 | 4 | auto(l5) | f | 18 | 29 | p |
audi | a4 | 1.8 | 1999 | 4 | manual(m5) | f | 21 | 29 | p |
audi | a4 | 2.0 | 2008 | 4 | manual(m6) | f | 20 | 31 | p |
audi | a4 | 2.0 | 2008 | 4 | auto(av) | f | 21 | 30 | p |
audi | a4 | 2.8 | 1999 | 6 | auto(l5) | f | 16 | 26 | p |
audi | a4 | 2.8 | 1999 | 6 | manual(m5) | f | 18 | 26 | p |
audi | a4 | 3.1 | 2008 | 6 | auto(av) | f | 18 | 27 | p |
audi | a4 quattro | 1.8 | 1999 | 4 | manual(m5) | 4 | 18 | 26 | p |
audi | a4 quattro | 1.8 | 1999 | 4 | auto(l5) | 4 | 16 | 25 | p |
audi | a4 quattro | 2.0 | 2008 | 4 | manual(m6) | 4 | 20 | 28 | p |
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.
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()
.
# 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.
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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.
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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):
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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
).
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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()
:
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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
:
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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:
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:
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:
Egenskap | Funktion | Kan specificeras med en variabel | Kan 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.