Oversigt over graftyper i R/ggplot2

Eksemplerne på denne side tager udgangspunkt i et datasæt (penguins) som er indbygget i R (hvis man har installeret pakken “palmerpenguins”). Datasættet indeholder bla. kolonnerne:

I nedenstående eksempler angives de funktioner der bruges til de mest almindelige plot. Først er angivet de “aestethics” der som minimum skal med (f.eks. geom_point(mapping = aes(x = ..., y = ...)) betyder at hvis man vil lave et punktdiagram skal man som minimum angive x og y

Eksemplerne kan vise flere mulige aestethics, f.eks. color. Derudover kan der typisk tilføjes mange flere parametre til at kontrollere grafens visuelle udtryk. Men spørg ChatGPT om det.

Punktdiagram

Punktdiagrammer laves med geom_point(mapping = aes(x = ..., y = ...))

library(palmerpenguins, quietly = TRUE)
data <- penguins
ggplot(data) +
    geom_point(mapping = aes(x = flipper_length_mm, y = body_mass_g, color = sex))

Histogram

Histogrammer laves med geom_histogram(mapping = aes(x = ...))

library(palmerpenguins, quietly = TRUE)
data <- penguins
ggplot(data) +
    geom_histogram(mapping = aes(x = body_mass_g), binwidth = 200, center = 4000)

Boxplot

Boxplot laves med geom_boxplot(mapping = aes(y = ..., x = ...))

library(palmerpenguins, quietly = TRUE)
data <- penguins %>%
    # fjern NA-værdier fra "sex"
    filter(!is.na(sex))
ggplot(data) +
    geom_boxplot(mapping = aes(x = sex, y = body_mass_g))

Dotplot

Et lodret dotplot laves med geom_dotplot(mapping = aes(y = ...), binaxis = "y", stackdir = "center")

library(palmerpenguins, quietly = TRUE)
data <- penguins %>%
    # vælg 50 tilfældige rækker
    slice_sample(n = 50)
ggplot(data) +
    geom_dotplot(
        mapping = aes(y = body_mass_g, x = sex),
        binaxis = "y",
        stackdir = "center"
    )

Plot en funktion

En anden ting der fungerer dårligt i Excel, er at plotte et funktionsudtryk. Her er man nødt til først at generere to eller flere punkter baseret på funktionen, og så plotte disse punkter, forbundet af en streg. I R kan man direkte plotte en funktion. Nedenstående kode laver en eksponentiel regression og tegner regressionslinjen oveni punkterne:

# Generer tilfældige data, som kunne være måling af et radioaktivt henfald over tid
#  (med aktivitet som aftager iht. henfaldsloven):
data <- tibble(time = 1:20) %>%
    mutate(activity = exp(-0.07 * time + 2)) %>%
    rowwise() %>%
    mutate(activity = rnorm(n = 1, mean = activity, sd = 0.05))

# lav en eksponentiel regression
fit <- nls(
    formula = activity ~ a * exp(b * time),
    data = data,
    start = list(a = 1, b = 1), # giv regressionen nogle tilfældige startværdier for koefficienterne
    control = list(maxiter = 100) # tilføj altid denne til en nls-regression
)

# hent koefficienterne a og b fra fittet
coef <- coef(fit)
a <- coef["a"]
b <- coef["b"]

# plot målinger og regressionslinje:
ggplot(data) +
    geom_point(mapping = aes(x = time, y = activity)) +
    # plot regressionslinjen
    stat_function(fun = \(time) {
        a * exp(b * time)
    })

Skabelonen for at plotte en funktion er altså ... + stat_function(fun = \(xværdi) {funktionsudtryk(xværdi)})