Fallstudie: Allometrie bei Blütenblättern

Von der primären Datenerhebung zur statistischen Analyse

DS2 SoSe 2023

Herausgegeben

June 29, 2023

1 Übersicht Messstationen

Show the code
dats <- df_fin |>
  select(Gruppenname, Breitengrad:Standorttyp, Ordnung, Familie, Gattung, Art, Pflanzen_ID) |>
  distinct() |> 
  group_by(Gruppenname, Breitengrad, Laengengrad, Ordnung, Familie, Gattung, Art) |>
  count() |> 
  ungroup()

# RColorBrewer::brewer.pal(12, name = "Paired")
# sort(unique(dats$Ordnung))

getColor <- function(dats) {
  sapply(dats$Ordnung, function(Ordnung) {
    if(Ordnung == "Asparagales") {
      "#A6CEE3"
    } else if (Ordnung == "Asterales") {
      "#1F78B4"
    } else if (Ordnung == "Cucurbitales") {
      "#B2DF8A"
    } else if(Ordnung == "Ericales") {
      "#33A02C"
    } else if(Ordnung == "Gentianales") {
      "#FB9A99"
    } else if(Ordnung == "Geraniales") {
      "#E31A1C" 
    } else if (Ordnung == "Lamiales") {
      "#FDBF6F" 
    } else if(Ordnung == "Magnoliales") {
      "#FF7F00"
    } else if(Ordnung == "Malpighiales") {
      "#CAB2D6"
    } else if (Ordnung == "Ranunculales") {
      "#6A3D9A"
    } else if (Ordnung == "Rosales") {
      "#FFFF99"
    } else { # Saxifragales
      "#B15928"
    }
  }
  )
}

my_colors <- getColor(dats)
names(my_colors) <- NULL

icons <- awesomeIcons(
  icon = 'ios-close',
  # iconColor = 'black',
  library = 'ion',
  markerColor = "gray",
  iconColor = my_colors
)

# Add more Info in popup
dats$content <- paste0(
  "<b>", dats$Gruppenname, "</b><br/>",
  "<em>", dats$Art, "</em><br/>",
  "(", dats$Familie, ", ", dats$Ordnung, ")<br/>",
  "Anzahl an beprobten Individuen: ", dats$n
)

p <- leaflet(dats) |> 
  addTiles() |> 
  setView(lng = 10, lat = 52.5, zoom = 6) |>
  addAwesomeMarkers(
    ~Laengengrad, ~Breitengrad, 
    icon = icons, popup = ~content)

p 
Show the code
# htmlwidgets::saveWidget(p, file = "./Uebersicht_Messorte_20230630.html")

2 Übersicht Standorttypen

Show the code
tidy_standorte <- df_fin |> 
  select(Standorttyp) |> 
  distinct() |> 
  mutate(Standorttyp = str_replace_all(Standorttyp, "/", ", ")) |> 
  arrange(Standorttyp)

df_wordcloud <- tidy_standorte |> 
  unnest_tokens(word, Standorttyp) |> 
  count(word, sort = TRUE) 

op <- par(cex = 1.5, mar = rep(0, 4), oma = rep(0, 4))
set.seed(4)
wordcloud::wordcloud(df_wordcloud$word,df_wordcloud$n,
  scale=c(6,.2),min.freq=3,
  max.words=Inf, random.order=FALSE, rot.per=.15, 
  colors=RColorBrewer::brewer.pal(8, "Dark2"))

Wordcloud der am häufigsten genannten Standorttypen

Wordcloud der am häufigsten genannten Standorttypen
Show the code
par(op)

kable(tidy_standorte, caption = "Detailierte Liste der angegebenen Standorttypen")
Detailierte Liste der angegebenen Standorttypen
Standorttyp
Bahnhof
Baumschule
Beetrand
Bergedorfer Schlosspark, Halbschattig, Windgeschützt
Bot. Garten
Botanischer Garten
Botanischer Garten (Klein Flottbek, IPM)
Botanischer Garten - Klein Flottbek
Botanischer_Garten
Botanischer_Garten_Hamburg
Friedhof
Fußgängerzone, wenig Sonne, teils Windgeschützt
Garten
Garten ( Nachbarn)
Garten (Oma)
Garten (Schleswig-Holstein)
Garten, Halbschatten
Garten, Schatten
Garten, Sonnig
Garten, Wiese am Stadtrand
Halbschatten
Kleingarten
Nebenstraße
Park
Park (Planten un Blomen)
Park - sonniger Standort
Park, Planten un Blomen - bewirtschafteter Standort
Park, Schatten
Park, Streuobstwiese
Parkfläche
Planten un Blomen
Planten un Blomen (Beim Wallgraben See)
Planten un Bloomen, Botanischer Garten
Planten un blomen
Schlafzimmer
Stadtpark
Verkehrsberuhigte Straße, Halbtags Sonne, wenig Windgeschützt
Vorgarten
Wegesrand Grasfläche
Wiese
Wildblumenbeet
halbschatten
halbschattig
halbschattig, halbtrocken
halbschattige_bis_schattige_lage
mensa
park
privater Garten
schattig
sonnig
vorgarten
wassernah

Wordcloud der am häufigsten genannten Standorttypen

3 Gesamtvergleich der Blattlängen und -breiten

3.1 Gruppenunterschiede der Einzelmessungen auf einem Blick

Show the code
df_fin |> 
  arrange(Ordnung, Familie, Gattung, Art, Gruppenname) |>
  mutate(
    Gruppenname = factor(Gruppenname) |> forcats::fct_inorder()
  ) |> 
  ggplot(aes(Gruppenname, Blattlaenge, fill = Ordnung_dt)) +
  geom_boxplot() +
  scale_fill_manual(values = col_order) +
  guides(fill = guide_legend(title = "Ordnung")) +
  ggtitle("Einzelmessungen der Blattlänge pro Gruppe, sortiert nach der Ordnung der untersuchten Art") +
  theme(legend.position = "bottom",
    axis.text.x = element_text(angle = 45, hjust = 1))

Show the code
df_fin |> 
  arrange(Ordnung, Familie, Gattung, Art, Gruppenname) |>
  mutate(
    Gruppenname = factor(Gruppenname) |> forcats::fct_inorder()
  ) |> 
  ggplot(aes(Gruppenname, Blattbreite, fill = Ordnung_dt)) +
  geom_boxplot() +
  scale_fill_manual(values = col_order) +
  guides(fill = guide_legend(title = "Ordnung")) +
  ggtitle("Einzelmessungen der Blattbreite pro Gruppe, sortiert nach der Ordnung der untersuchten Art") +
  theme(legend.position = "bottom",
    axis.text.x = element_text(angle = 45, hjust = 1))

3.2 Vergleich der Blattlänge zwischen und innerhalb der Arten

Show the code
df_fin |> 
  arrange(Ordnung, Familie, Gattung, Art, Gruppenname) |>
  mutate(
    Gattung = factor(Gattung) |> forcats::fct_inorder(),
    Art = factor(Art) |> forcats::fct_inorder()
  ) |> 
  filter(Ordnung != "Ericales") |> 
  ggplot(aes(Gruppenname, y = Blattlaenge, fill = Ordnung_dt)) +
  geom_boxplot() +
  scale_fill_manual(values = col_order[-4]) +
  guides(fill = guide_legend(title = "Ordnung")) +
  facet_wrap(vars(Art), ncol = 5, scales = "free") +
  ggtitle("Variabilität der einzelnen Blattlängen (ohne die Ordnung Ericales)") +
  theme(legend.position = "bottom",
    axis.text.x = element_text(angle = 30, hjust = 1))

Show the code
df_fin |> 
  arrange(Ordnung, Familie, Gattung, Art, Gruppenname) |>
  mutate(
    Gattung = factor(Gattung) |> forcats::fct_inorder(),
    Art = factor(Art) |> forcats::fct_inorder()
  ) |> 
  filter(Ordnung == "Ericales") |> 
  ggplot(aes(Gruppenname, y = Blattlaenge, fill = Ordnung_dt)) +
  geom_boxplot() +
  scale_fill_manual(values = col_order[4]) +
  guides(fill = guide_legend(title = "Ordnung")) +
  facet_wrap(vars(Art), ncol = 5, scales = "free_x") +
  ggtitle("Variabilität der einzelnen Blattlängen (NUR die Ordnung Ericales)") +
  theme(
    legend.position = "bottom",
    axis.text.x = element_text(size = 7, angle = 30, hjust = 1),
    strip.text.x.top = element_text(size = 7)
  )

3.3 Vergleich der Blattbreite zwischen und innerhalb der Arten

Show the code
df_fin |> 
  arrange(Ordnung, Familie, Gattung, Art, Gruppenname) |>
  mutate(
    Gattung = factor(Gattung) |> forcats::fct_inorder(),
    Art = factor(Art) |> forcats::fct_inorder()
  ) |> 
  filter(Ordnung != "Ericales") |> 
  ggplot(aes(Gruppenname, y = Blattbreite, fill = Ordnung_dt)) +
  geom_boxplot() +
  scale_fill_manual(values = col_order[-4]) +
  guides(fill = guide_legend(title = "Ordnung")) +
  facet_wrap(vars(Art), ncol = 5, scales = "free") +
  ggtitle("Variabilität der einzelnen Blattbreiten (ohne die Ordnung Ericales)") +
  theme(legend.position = "bottom",
    axis.text.x = element_text(angle = 30, hjust = 1))

Show the code
df_fin |> 
  arrange(Ordnung, Familie, Gattung, Art, Gruppenname) |>
  mutate(
    Gattung = factor(Gattung) |> forcats::fct_inorder(),
    Art = factor(Art) |> forcats::fct_inorder()
  ) |> 
  filter(Ordnung == "Ericales") |> 
  ggplot(aes(Gruppenname, y = Blattbreite, fill = Ordnung_dt)) +
  geom_boxplot() +
  scale_fill_manual(values = col_order[4]) +
  guides(fill = guide_legend(title = "Ordnung")) +
  facet_wrap(vars(Art), ncol = 5, scales = "free_x") +
  ggtitle("Variabilität der einzelnen Blattbreiten (NUR die Ordnung Ericales)") +
  theme(
    legend.position = "bottom",
    axis.text.x = element_text(size = 7, angle = 30, hjust = 1),
    strip.text.x.top = element_text(size = 7)
  )

4 Vergleich der Größenvariabilität innerhalb und zwischen den Blüten und Pflanzen

4.1 Beispiel von Magnolia soulangeana (Gruppe ‘GDSBT5’): Blattlänge

Show the code
df_sub <- df_fin |> 
  filter(Gruppenname == "GDSBT5") |> 
  mutate(
    Pflanzen_ID = factor(Pflanzen_ID, levels = 1:10),
    Blueten_ID = factor(Blueten_ID)
  )

p1 <- df_sub |> 
  ggplot(aes(y = Blattlaenge)) +
  geom_boxplot() +
  ggtitle("Gesamtvariabilität")

p2 <- df_sub |> 
  ggplot(aes(x = Pflanzen_ID, y = Blattlaenge)) +
  geom_boxplot() +
  ggtitle("Variabilität zwischen den Pflanzen")

p3 <- df_sub |> 
  ggplot(aes(x = Blueten_ID, y = Blattlaenge)) +
  geom_boxplot() +
  facet_wrap(vars(Pflanzen_ID), nrow = 2) +
  ggtitle("Variabilität zwischen und innerhalb der Blüten")

grid.arrange(p1, p2, p3,  
  layout_matrix = matrix(c(1,2,2,3,3,3), nrow = 2, byrow = TRUE))

4.2 Überblick der Variabilität zwischen den Pflanzen für alle Gruppen

Show the code
df_fin |> 
  filter(Gruppenname != "Tolidonija") |> 
  arrange(Ordnung, Familie, Gattung, Art, Gruppenname) |>
  mutate(
    Pflanzen_ID = factor(Pflanzen_ID, levels = 1:10),
    Blueten_ID = factor(Blueten_ID),
    Gruppenname = factor(Gruppenname) |> forcats::fct_inorder()
  ) |> 
  ggplot(aes(y = Blattlaenge, x = Pflanzen_ID, fill = Ordnung)) +
  geom_boxplot() +
  facet_grid(Gruppenname~., scales = "free") +
  scale_fill_manual(values = col_order) +
  ggtitle("Einzelmessungen der Blattlänge pro Pflanze, sortiert nach der Gruppe \nund Ordnung der untersuchten Art") +
  theme(legend.position = "bottom")

5 Vergleich der Längen-Breiten-Beziehung zwischen den Ordnungen

5.1 Visualisierung der Einzelmessungen

Show the code
n_groups_per_order <- df_fin |> 
  select(Ordnung, Gruppenname) |> 
  distinct() |> 
  group_by(Ordnung) |> 
  count() |> 
  rename(n_groups = n)

df_fin |> 
  full_join(n_groups_per_order) |> 
  mutate(Ordnung_n = str_c(Ordnung, " (Gruppenzahl: ", n_groups, ")")) |> 
  arrange(Ordnung, Familie, Gattung, Art, Gruppenname) |>
  mutate(
    Gattung = factor(Gattung) |> forcats::fct_inorder(),
    Art = factor(Art) |> forcats::fct_inorder()
  ) |> 
  ggplot(aes(Blattlaenge, Blattbreite, colour = Gruppenname)) +
  geom_point() +
  facet_wrap(~Ordnung_n, ncol = 3, scales = "free") +
  guides(colour = "none")

5.2 Visualisierung der Pflanzenmittelwerte

Show the code
df_fin |> 
  full_join(n_groups_per_order) |> 
  mutate(Ordnung_n = str_c(Ordnung, " (Gruppenzahl: ", n_groups, ")")) |> 
  arrange(Ordnung, Familie, Gattung, Art, Gruppenname) |>
  mutate(
    Gattung = factor(Gattung) |> forcats::fct_inorder(),
    Art = factor(Art) |> forcats::fct_inorder()
  ) |> 
  group_by(Ordnung_n, Gruppenname, Pflanzen_ID, Blueten_ID) |> 
  summarise(Blattlaenge = mean(Blattlaenge), Blattbreite = mean(Blattbreite)) |> 
  group_by(Ordnung_n, Gruppenname, Pflanzen_ID) |> 
  summarise(Blattlaenge = mean(Blattlaenge), Blattbreite = mean(Blattbreite)) |>
  ggplot(aes(Blattlaenge, Blattbreite, colour = Gruppenname)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  facet_wrap(~Ordnung_n, ncol = 3, scales = "free") +
  guides(colour = "none")