Data source for this week’s visualizations: https://github.com/rfordatascience/tidytuesday/blob/main/data/2026/2026-02-03/readme.md
#tidytuesday | 2026 | Wk5 | Edible Plants Database
This week our challenge was to edible plants courtesy of the GROW Observatory’s Edible Plant Database (EPD). The GROW Observatory is a European Citizen Science project regarding growing food, soil moisture sensing and land monitoring. Thanks to Nicola Rennie, who curated this week’s dataset.
For this challenge, I decided to look at edible plants in terms of 3 common considerations (temperature tolerance, water required, and seasonality) through a Sankey chart using the ggalluvial() R package. Since Sankey charts cannot tell us much about a particular plant, I also created an interactive chart using reactable().
library(ggplot2)
library(tidyverse)
library(ggthemes)
library(ggalluvial)
library(reactable)
library(htmltools)
#data cleaning not shown
ggplot(flow_data,
aes(axis1 = temperature_class,
axis2 = water_cat,
axis3 = season_cat,
y = n)) +
geom_alluvium(aes(fill = temperature_class), width = 1/12, alpha = 0.8) +
geom_stratum(width = 0.25, fill = "#E9E3D6", color = "#B8B0A3")+
geom_text(stat="stratum",
aes(label = after_stat(stratum)),
vjust = 0.7,
size =3.25)+
scale_x_discrete(limits = c("Temperature", "Water Required", "Season"),
expand = c(.05, .05)) +
labs(
title = "What Edible Plants Need to Thrive",
subtitle = "From Temperature Tolerance to Water and Season",
y = "Number of plants",
x = NULL,
fill = "Temperature",
caption = "Lyndsay Miles | #TidyTuesday\nSource: the GROW observatory"
) +
scale_fill_manual(values = c(
"Very hardy" = "#A7C957",
"Hardy" = "#2A9D8F",
"Half hardy" = "#264653",
"Tender" = "#E76F51"
))+
theme_solarized()+
theme(
plot.title = element_text(size = 16, face = "bold", color = "#3A3A3A"),
plot.caption = element_text(size = 8, color = "#555555"),
plot.subtitle = element_text(color = "#555555"),
legend.title = element_text(color = "#555555"),
legend.text = element_text(color = "#555555")
)
#note: data cleaning not shown
tagList(
tags$h3("Plant growing guide", style = "color:#586E75;"),
tags$p("Water, sunlight, soil, and hardiness requirements", style = "color:#777777; margin-top:-6px;"),
reactable(
table,
filterable = TRUE,
searchable = TRUE,
pagination = TRUE,
compact = TRUE,
striped = TRUE,
columns = list(
plant_name = colDef(name = "Plant name"),
season = colDef(name = "Season"),
water = colDef(name = "Water"),
sunlight = colDef(name = "Sunlight"),
temperature_class = colDef(name = "Hardiness"),
soil = colDef(name = "Soil"),
nutrients = colDef(name = "Nutrients needed"),
preferred_ph_range = colDef(name = "Ph Range"),
sensitivities = colDef(name = "Sensitivities")
),
defaultColDef = colDef(
headerStyle = list(fontWeight = "600")
),
style = list(background = "#FDF6E3")
)
)
Water, sunlight, soil, and hardiness requirements