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

Geoms (geometriska objekt)

Avsnitt Progress
0% färdig

I ggplot2 skapas en graf genom att deklarera geoms, som är den engelska förkortningen för geometriska objekt. Geoms deklareras sekventiellt; en graf kan således innehålla många geoms som visualiserar data. Varje geom har mer eller mindre intuitiva namn. Funktionen geom_bar() skapar stapeldiagram; geom_line() skapar linjer; geom_hline() skapar horisontella linjer; geom_boxplot() skapar boxplots, osv. Listan nedan redovisar de vanligaste geometriska objekten med länkar till dokumentationen. Funktionernas namn indikerar vad de visualiserar.

geom_abline()
geom_hline()
geom_vline()
geom_bar()
geom_col()
stat_count()
geom_bin_2d()
stat_bin_2d()
geom_blank()
geom_boxplot()
stat_boxplot()
geom_contour()
geom_abline()
geom_hline()
geom_vline()
geom_bar()
geom_col()
stat_count()
geom_bin_2d()
stat_bin_2d()
geom_blank()
geom_boxplot()
stat_boxplot()
geom_contour()
geom_contour_filled()
stat_contour()
stat_contour_filled()
geom_count()
stat_sum()
geom_density()
stat_density()
geom_density_2d()
geom_density_2d_filled()
stat_density_2d()
stat_density_2d_filled()
geom_dotplot()
geom_errorbarh()
geom_function()
stat_function()
geom_hex()
stat_bin_hex()
geom_freqpoly()
geom_histogram()
stat_bin()
geom_jitter()
geom_crossbar()
geom_errorbar()
geom_linerange()
geom_pointrange()
geom_map()
geom_path()
geom_line()
geom_step()
geom_point()
geom_polygon()
geom_qq_line()
stat_qq_line()
geom_qq()
stat_qq()
geom_quantile()
stat_quantile()
geom_ribbon()
geom_area()
stat_align()
geom_rug()
geom_segment()
geom_curve()
geom_smooth()
stat_smooth()
geom_spoke()
geom_label()
geom_text()
geom_raster()
geom_rect()
geom_tile()
geom_violin()
stat_ydensity()

Estetisk mappning av geometriska objekt

Ett geometriskt objekt måste vad som skall visualiseras. Detta görs genom estetisk mapping, där exempelvis data för x-axel, y-axel, etc, specificeras. Estetisk mappning definieras med funktionen aes(). En geom kan ärva den estetiska mappningen från huvudanropet i ggplot(), eller genom att deklarera detta i det geometriska objektet. Principen är att ett geom alltid ärver aes() från ggplot() om inte annat specificeras i geom. Nedan skapas två identiska grafer genom att specificera aes() i ggplot() respektive i geom_point(), som skapar ett spridningsdiagram (eng. scatter plot):

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

# aes() specificeras i geom_point()
ggplot(data=mpg) +
  geom_point(aes(x = displ, y = hwy))

Geometriska objekt definieras i lager

Du kan visualisera flera geometriska objekt i en graf genom att deklarera dem sekventiellt. Efter ett geometriska objekt deklarerats måste det avslutas med + och en radbrytning göras för att fortsätta deklarera objekt eller inställningar. Nedan används data från mpg för att visualisera sambandet mellan motorns volym (displ) och bränsleförbrukning (hwy) med två olika geometriska objekt. Det första objektet är geom_point() som skapar ett spridningsdiagram för datapunkterna. Det andra objektet är geom_smooth() som automatiskt beräknar en flexibel regressionslinje för datapunkterna; denna fångar linjära och icke-linjära mönster i data.

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

Notera att varje geometriskt objekt ärvde estetisk mappning (aes()) från ggplot(). Notera också att punkterna ligger under regressionslinjen (blå linje), vilket beror på geom_point() deklarerades först i koden ovan.

Alla geometriska funktioner har ett aes() argument, vilket innebär att den estetiska mappningen kan deklareras i det geometriska objektet istället. Nedanstående kod resulterar i en likadan graf som ovanstående, men här deklareras aes() istället i varje geom:

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

En estetisk mappning yttrar sig på olika vis i olika geoms. Det illustreras här nedan genom att mappa variabeln class (fordonstyp) till argumentet color i aes(). För geom_point() kommer detta resultera i att datapunkterna färgkodas efter fordonstyp. För geom_smooth() kommer det innebära att separata regressionslinjer beräknas och färgkodas (med samma färger):

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

Vi kan ignorera aes() i ggplot() (rad 1) och specificera en separat aes() i geom_smooth() (rad 3). Nedan görs detta genom att mappa color till fordonets drivlina (drv).

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

Tyvärr ser vi att när både class och drv mappas till color så får en (istället för två) färgförklaringar till höger. Det gör att färgkoder för drv (4, f, r) presenteras i samma kolumn som färgkoder för class (2seater, compact, midsize, etc). Detta kan skapa tvetydighet vid tolkning av grafen. För att undkomma detta behöver vi mappa drv till ett annat argument i aes(). I detta fall kan vi mappa drv till linetype, som är typ av linje. Då får varje nivå i drv en egen typ av linje. Notera också att vi specificerar se=FALSE för att ta bort konfidensintervallet för linjerna samt method="lm" som presenterar en linjär regressionslinje istället för en flexibel linje (dessa tillägg görs för att grafen ska bli tydligare):

R
ggplot(data = mpg, aes(x = displ, y = hwy, color=class)) + 
  geom_point() +
  geom_smooth(aes(linetype=drv), se=FALSE, method="lm")

Det lyckades! Kan du se om sambandet mellan displ och hwy varierar med olika kombinationer av suv och drv?

Ett geometriskt objekt kan använda en subgrupp i datamängden. Låt oss göra om ovanstående graf och endast visa regressionslinjen för bilar av klassen pickup:

R
ggplot(data = mpg, aes(x = displ,
                       y = hwy,
                       color=class)) +
  geom_point() +
  geom_smooth(data=filter(mpg, class=="pickup"))

På samma vis kan vi skapa ett geometriskt objekt för att förstärka en del av data. Vi gör nu följande:

  1. Rad 8: Lägg till en geom_point() endast med pickup-bilar, med svarta punkter i storlek 4.5.
  2. Rad 9: Lägg till en geom_point() endast med pickup-bilar, i storlek 2.5. Dessa kommer ärva color=class från ggplot().
  3. Rad 12: En geom_smooth() endast med pickup-bilar.
R
ggplot(data = mpg, aes(x = displ,
                       y = hwy,
                       color=class)) +
  # Alla datapunkterna
  geom_point() +
  
  # Datapunkter för pickup-bilar
  geom_point(data=filter(mpg, class=="pickup"), size=4.5, color="black") +
  geom_point(data=filter(mpg, class=="pickup"), size=2.5) +
  
  # Linje för pickup-bilar
  geom_smooth(data=filter(mpg, class=="pickup"))

Syftet med detta är att fokusera grafen på pickup-bilar. Punkter med storlek 2.5 deklareras efter punkter med storlek 4.5, så de mindre punkterna hamnar ovanpå de stora. Objektet geom_smooth()deklareras allra sist och hamnar därför längst fram i grafen.