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:
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> |
---|---|---|---|---|---|---|---|---|---|
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 |
I följande exempel skapas en graf med x
-axel, y
-axel och färgkodning (color
) baserat på kolumnen class
:
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:
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
Dessa funktioner och deras namn tolkas som följer:
Funktion | Fö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_discrete | Modifierar 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 medscale_x_continuous()
. - Om
y
-axeln är en numerisk variabel så justeras den medscale_y_continuous()
. - Om
x
-axeln är en kategorisk variabel så justeras den medscale_x_discrete()
. - Om
y
-axeln är en kategorisk variabel så justeras den medscale_y_discrete()
. - Om
color
är en kategorisk variabel så justeras den medscale_color_continuous()
. - Om
color
är en kategorisk variabel så justeras den medscale_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:
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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:
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
I nästa exempel ändrar vi så att x-axelns begränsning utökas från 0 till 15:
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:
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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".
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"
.
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
Argumentet legend.position
accepterar även specifikationerna "bottom", "top", "right", "left". Detta demonstreras nu med "bottom" som val:
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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.
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())
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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".
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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
.
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:
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
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()
.
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.
På 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.
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
.
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.
BLOCKERAD KOD, BILD ELLER TEXT
Du måste logga in för att komma åt allt material.