Datavisualisering

R: Från datahantering till visualisering

Datavisualisering är den grafiska representationen av information och data

Utforska –> Förstå –> Förklara

Innan du visualiserar

Vad är syftet?

Vem är din målgrupp?

Vilket är det bästa sättet att visualisera ditt budskap?

Grammar of graphics

Grammar of graphics

Grammar of graphics

Data

Rows: 344
Columns: 8
$ species           <fct> Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adel…
$ island            <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torgerse…
$ bill_length_mm    <dbl> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34.1, …
$ bill_depth_mm     <dbl> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18.1, …
$ flipper_length_mm <int> 181, 186, 195, NA, 193, 190, 181, 195, 193, 190, 186…
$ body_mass_g       <int> 3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 3475, …
$ sex               <fct> male, female, female, NA, female, male, female, male…
$ year              <int> 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007…

Layers/lager

# Layer 1: Data
ggplot(data = penguins)

# Layer 2: x and y
ggplot(data = penguins,
       mapping = aes(x = bill_length_mm, y = bill_depth_mm))

# Layer 3: geometric object(s)
ggplot(data = penguins,
       mapping = aes(x = bill_length_mm, y = bill_depth_mm)) +
  geom_point()

# Layer 4: Facets
ggplot(data = penguins,
       mapping = aes(x = bill_length_mm, y = bill_depth_mm)) +
    geom_point() +
  facet_wrap(~species)

Lager 1: Data

Data

ggplot(data = penguins, aes(x = bill_length_mm, y = bill_depth_mm)) +
    geom_point()

ggplot() +
    geom_point(data = penguins, aes(x = bill_length_mm, y = bill_depth_mm))

ggplot(data = penguins) +
    geom_point(aes(x = bill_length_mm, y = bill_depth_mm))

penguins |>
  ggplot() +
    geom_point(aes(x = bill_length_mm, y = bill_depth_mm))

Lager 2: Aestethics

Aesthetics/estetik

Tip

Aesthetics används för att länka variabler till visuella attribut i ggplot figurer.

aes() är platsen där du anger vilka variabler som ska bestämma tex x och y-axel värden, färg, fyllning eller form.

Aesthetics

x, y: Variabeln längs x- och y-axeln

colour: eller color: Anger färg på geometrier (geoms)

fill: Färgen inuti geometrier (t.ex. staplar, områden)

group: Gruppera geoms efter någon gruppering som finns i data, tex en linje per id-nummer i data

shape: Formen som används för att plotta punkter, (trianglar cirklar, fyrkanter)

linetype: Typ av linje som används (hel, streckad, etc.)

size: Storleksskalning för att representera en extra dimension, kan användas för tex geom_point()

alpha: Geometrins transparens

Aesthetics

  • Många av dessa aesthetics kan användas utanför aes(), vilket innebär att de inte är bundna till någon specifik datavariabel utan har ett fast värde.

    • geom_point(aes(x, y), alpha = 0.5)) (bestämmer transparens och har en skala från 0 till 1, där 0 är genomskinligt och 1 är fullt synlig).
  • Global vs Lokal Mapping:

    • Global Mapping: Aesthetics specificerade inom ggplot(aes()) gäller för alla geoms i plotten.

      ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species)) +
        geom_point()
    • Lokal Mapping: Aesthetics specificerade inom ett specifikt geom gäller endast för det geom-lagret.

      ggplot(penguins) +
        geom_point(aes(x = bill_length_mm, y = bill_depth_mm, color = species))
ggplot(data = penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species)) +
    geom_point()

ggplot(data = penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species, size = body_mass_g)) +
    geom_point()

ggplot(data = penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species, size = body_mass_g) ) +
    geom_point(alpha =.7)

ggplot(data = penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species, size = body_mass_g, shape = island)) +
    geom_point(alpha =.5)

Scales (skalor)

  • Skalor definierar hur data värden omvandlas till estetiska attribut som färg, storlek eller form.

  • Varje aesthetic-mappning har en motsvarande skala som styr hur värdena visualiseras.

  • Varje aestetic kan endast ha en skala annars skrivs den tidigare över av den senare.

  • Guider hjälper till att tolka dessa mappningar genom axlar och legender.

  • För positionsskalor fungerar axlarna som guider

  • För färgskalor fungerar legenderna som guider

Tre huvudskaltyper

  1. Kontinuerlig:
    • För kontinuerliga data.
    • Exempel: scale_x_continuous(), scale_color_gradient()
  2. Diskret:
    • För kategoriska data.
    • Exempel: scale_color_discrete(), scale_shape_manual()
  3. Intervall:
    • För data som är indelade i intervaller.
    • Exempel: scale_fill_binned()
ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g, color = bill_length_mm)) +
  geom_point() +
  scale_color_gradient(low = "blue", high = "red")

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g, color = species)) +
    geom_point() +
    scale_color_discrete(name = "Art", labels = c("Adelie" = "art1", "Chinstrap" = "art2", "Gentoo" = "art3"))

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g, color = species)) +
  geom_point() +
  scale_color_manual(values = c("Adelie" = "orange",
                                "Chinstrap" = "steelblue",
                                "Gentoo" = "gold4"))

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g, color = species)) +
  geom_point() +
  scale_color_manual(values = c("Adelie" = "orange",
                                "Chinstrap" = "steelblue",
                                "Gentoo" = "gold4")) +
    scale_x_continuous(breaks = c(200, 210, 220),
                     labels = c("Låg", "Medel", "Hög"))

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g, color = species)) +
  geom_point() +
  scale_color_manual(values = c("Adelie" = "orange",
                                "Chinstrap" = "steelblue",
                                "Gentoo" = "gold4")) +
    scale_x_log10(breaks = c(200, 210, 220),
                     labels = c("Låg", "Medel", "Hög"))

ggplot(mpg, aes(displ, hwy)) +
  geom_point(aes(colour = class)) +
  scale_x_continuous(name = "Horizontella axeln") +
  scale_y_continuous(name = "Vertikala axeln")

Legender och guider

Varje skala är associerad med en guide (axlar och legender) som visar sambandet mellan det estetiska attributet och data.

ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species)) +
  geom_point() +
  labs(
       x = "Näbblängd (mm)",
       y = "Näbbdjup (mm)",
       color = "Art")

ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species, shape = species)) +
  geom_point() +
  labs(
    x = "Näbblängd (mm)",
    y = "Näbbdjup (mm)",
  ) +
  guides(
    color = guide_legend(title = "Species", keywidth = 5, keyheight = 2),
    shape = guide_legend(title = "Arter", keywidth = 5, keyheight = 2)
  )

ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species, shape = species)) +
  geom_point() +
  labs(
    x = "Näbblängd (mm)",
    y = "Näbbdjup (mm)",
  ) +
  guides(
    color = guide_legend(title = "Arter", keywidth = 5, keyheight = 2, override.aes = list(size = 5)),
    shape = guide_legend(title = "Arter", keywidth = 5, keyheight = 2, override.aes = list(size = 5))
  )

Relationen mellan Aesthetics, Scales, Guides, Legends, och Axes

Relationen mellan Aesthetics, Guides, Legends, Scales och Axes

Aesthetics - Definition: Bestämmer hur data mappas till visuella attribut som färg, form, storlek, etc. - Exempel: aes(x = bill_length_mm, y = bill_depth_mm, colour = species, size = flipper_length_mm)

Scales - Definition: Definierar hur data värden omvandlas till estetiska attribut. - Relation till Aesthetics: För varje aesthetic-mappning finns en motsvarande skala som styr hur värdena visualiseras. - Exempel: scale_colour_manual(), scale_size_continuous()

Guides - Definition: Hjälper användaren att tolka de estetiska mappningarna. - Relation till Scales: Varje skala är associerad med en guide som visar relationen mellan data och det estetiska attributet. - Typer av Guider: - Legender: För icke-position estetiska (t.ex. färg, form) - Axlar: För position estetiska (x och y axlar)

Legends - Definition: En typ av guide som förklarar mappningen mellan estetiska attribut och data kategorier. - Relation till Guides och Scales: Legenden genereras automatiskt baserat på skalan och den aesthetic-mappningen den är associerad med. - Anpassning: Kan anpassas med guides() eller temafunktioner (theme).

Axes - Definition: Visar skalan för position estetiska (x och y axlar). - Relation till Guides och Scales: Axlar är guider för position estetiska och är kopplade till deras respektive skalor. - Anpassning: Justeras med scale_x_*() och scale_y_*() samt temafunktioner (theme).

Lager 3: Geometries

Geoms

Olika geoms kräver olika estetiska (aes()) mappningar.

Flera geoms kan staplas som lager i en figur, men deras ordning spelar roll:
Senare lager skrivs ovanpå tidigare lager.

Geom Användningsområde Vanliga aesthetics
geom_point() Scatterplots x, y, color, size, shape
geom_line() Line plots x, y, color, linetype, linewidth
geom_bar() Bar charts (counts) x, fill
geom_col() Bar charts (pre-summarized data) x, y, fill
geom_histogram() Distribution of continuous variables x, fill
geom_boxplot() Boxplots for summary statistics x, y, fill
geom_violin() Violin plots for distribution visualization x, y, fill
geom_density() Density plots x, fill, color
geom_area() Area under a curve x, y, fill, color
geom_smooth() Add a smoothed trendline x, y, color, linetype
geom_text() Add text labels x, y, label, color, size
geom_tile() Heatmaps x, y, fill
geom_ribbon() Confidence bands x, ymin, ymax, fill
geom_polygon() Polygons x, y, group, fill, color
geom_segment() Line segments x, y, xend, yend, color, size
geom_path() Lines following a specific order of points x, y, color, linetype
geom_density_2d() Contour plots for 2D density estimation x, y, color
geom_jitter() Scatterplot with added randomness x, y, color, size, shape
geom_errorbar() Error bars x, ymin, ymax, color, width
ggplot(penguins, aes(x = species, y = body_mass_g, fill = species)) +
  geom_violin(alpha = 0.5)

ggplot(penguins, aes(x = species, y = body_mass_g, fill = species)) +
  geom_violin(alpha = 0.5, trim = FALSE) +
  geom_boxplot(width = 0.2, alpha = 0.7)

ggplot(penguins, aes(x = species, y = body_mass_g, fill = species)) +
  geom_violin(alpha = 0.5, trim = FALSE) +
  geom_boxplot(width = 0.2, alpha = 0.7, outlier.shape = NA) +
  geom_point(position = position_jitter(width = 0.2), color = "black", alpha = 0.6)

Geoms - position

Position är den tredje nödvändiga delen av ett lager, tillsammans med statistics och geoms.

Position-delen av ett lager ansvarar för att “dodge”, “jittra” och “nudge” grupper av data för att minimera deras överlappning, eller på annat sätt justera deras positioner.

ggplot(penguins, aes(x = species, fill = sex)) +
  geom_bar(position = "stack")

ggplot(penguins, aes(x = species, fill = sex)) +
  geom_bar(position = "dodge")

ggplot(penguins, aes(x = species, fill = sex)) +
  geom_bar(position = "fill")

ggplot(penguins, aes(x = species, fill = sex)) +
  geom_bar(position = "identity", alpha = 0.6)

ggplot(penguins, aes(x = species, y = body_mass_g, color = sex)) +
 geom_point(position = position_nudge(x = 0.2))

ggplot(penguins, aes(x = species, y = body_mass_g, color = sex)) +
  geom_jitter(width = 0.2, alpha = 0.5)

Lager 4: Facets

Facets

Facettering används för att skapa små multipla grafer baserat på kategoriska variabler.

ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm)) +
  geom_point(aes(color = species)) +
  facet_wrap(~ island)

ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm)) +
  geom_point(aes(color = species)) +
  facet_grid(sex ~ island)

ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm)) +
  geom_point(aes(color = species)) +
  facet_grid(sex ~ island, scales = "free")

Lager 5: Statistics

Statistcs

En statistisk transformation, eller stat, bearbetar data, oftast genom att sammanfatta dem på något sätt. Tex medelvärden, summor och andra statistiska summeringar av data. De används i bakgrunden för att skapa geoms genom att skapa ett nytt dataset med sammanfattad data.

  • stat_bin(): Används för geom_bar(), geom_freqpoly(), geom_histogram()

  • stat_boxplot(): Används för geom_boxplot()

  • stat_smooth(): Används för geom_smooth()

Det finns två sätt att använda dessa stat-funktioner: 1. Lägga till en stat_()-funktion och skriva över standard geomet. 2. Lägga till en geom_()-funktion och skriva över standard stat.

ggplot(penguins, aes(x = species, y = bill_length_mm)) +
  geom_point(alpha = 0.6) +
  stat_summary(geom = "point", fun = "mean", colour = "darkorange", size = 7)

# Rekomenderad eftersom den tydligt visar en sammanfattning, inte rå data.
ggplot(penguins, aes(x = species, y = bill_length_mm)) +
  geom_point(alpha = 0.6) +
  geom_point(stat = "summary", fun = "mean", colour = "darkorange", size = 7)

stat_bin är statistiken som används för att skapa histogram. Den genererar följande variabler:

  • count: Antalet observationer i varje bin (används som standard).
  • density: Densiteten av observationer i varje bin (procent av totalen / binbredd).
  • x: Mittpunkten av varje bin/stapel.
ggplot(penguins, aes(body_mass_g)) +
  geom_histogram(binwidth = 100)

ggplot(penguins, aes(body_mass_g)) +
  geom_histogram(aes(y = after_stat(density)), binwidth = 100)

Lager 6: Coordinates

Coordinates

Medan skalorna kontrollerar vilka värden som visas på axlarna och hur de mappas från data till position, är det koordinatsystemet som faktiskt ritar dem.

Ett koordinatsystem kombinerar två positioner/variabler, x och y, för att placera objekt i en 2D-rymd mellan dessa.

Det finns linjära och icke linjära koordinatsystem

bas <- ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm)) +
  geom_point() +
  geom_smooth()


bas

# Begränsa x-axeln (tar bort data utanför 40-60 mm)
bas + coord_cartesian(xlim = c(40, 60))

bas +
  coord_flip()

bas +
  coord_fixed(ratio = 1)  # Aspect ratio 1:1

rect <- data.frame(x = 50, y = 50)
line <- data.frame(x = c(1, 200), y = c(100, 1))
base <- ggplot(mapping = aes(x, y)) +
  geom_tile(data = rect, aes(width = 50, height = 50)) +
  geom_line(data = line) +
  xlab(NULL) + ylab(NULL)
base

base + coord_polar("x")

base + coord_polar("y")

bas <- ggplot(penguins, aes(x = "", fill = species)) +
  geom_bar(width = 1)

bas

bas +
  coord_polar(theta = "y")

bas +
  coord_polar(theta = "x")

library(maps)

world_map <- map_data("world")

ggplot(world_map, aes(x = long, y = lat, group = group)) +
  geom_polygon(fill = "#27a57a", color = "white") +
  coord_map(projection = "ortho", orientation = c(20, 30, 0)) +
  theme_void()

Lager 7: Themes

Themes

Teman påverkar grafens övergripande visuella utseende inklusive typsnitt, färger, storlek på text och marginer.

ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species)) +
  geom_point() +
  theme_minimal()

ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species)) +
  geom_point() +
  theme_classic()

ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species)) +
  geom_point(size = 3) +
  theme(
    panel.background = element_rect(fill = "steelblue"),
    panel.grid.major = element_line(color = "orange"),
    axis.title = element_text(size = 16, face = "bold"),
    legend.position = "bottom" # "none" om man inte vill ha en legend
  )

Ändringsbara element i teman

Förändringsbara tamadelar av Isabella Benabaye

Spara

Spara

# Spara plotten i en PDF-fil
ggsave(filename = "minfigur.pdf",  # Namnge filen och ange filformat, t.ex. .pdf, .png, .jpeg
       plot = minfigur,            # Ange namnet på plot-objektet som ska sparas
       height = 8.5,                # Ange önskad höjd
       width = 11,                  # Ange önskad bredd
       units = "cm")                # Ange enheter (t.ex. tum, in)


ggsave(filename = "minfigur.png",  # Namnge filen och ange filformat, t.ex. .pdf, .png, .jpeg
       plot = minfigur,            # Ange namnet på plot-objektet som ska sparas
       height = 8.5,                # Ange önskad höjd
       width = 11,                  # Ange önskad bredd
       units = "cm",               # Ange enheter (t.ex. tum, in)
       dpi = 300)                  # Kvalite på bilden

Designriktlinjer

  • Vänsterjustera den mesta texten
  • Titlar bör vara vänsterjusterade
  • Etiketter och underrubriker kan vara
    centrerade
    eller
    högerjusterade
  • Roterar inte din text
  • Typsnitt bör passa kontext och ämne
    • Några bra typsnitt är Montserrat, Lato, Roboto, Open Sans
    • Använd några, inte många
  • Hierarki i text kan visualiseras med storlek, färg, fetstil
    • Var konsekvent!

tidytuesday 2020

Ytterligare resurser för visualisering