After hearing Nancy Shackelford’s suggestion to create a data visualization tool for HAT Garry Oak Ecosystems (GOE) Monitoring as a suitable ER390 Final Project, I began thinking about several creative solutions. Using example data from tables in the ECCC Monitoring report that influenced HAT’s project design (Malloff & Shackelford, 2024), I began to develop R code, modifiable to incorporate HAT data when available. This case study may also model methods enabling comparison of other Garry Oak Ecosystem Monitoring Projects.
Comparing monitoring results from multiple restoration projects requires consistent measurements of vegetation composition (e.g. native and exotic species cover), which may help identify responses to stressors affecting already compromised and rare GOE. Representing data in a visual manner can help make complex data more understandable than a tables of numbers, and may reveal patterns or trends resulting from different restoration management actions (Malloff & Shackelford, 2024). Data visualization can represent abstract information visually, allow for data exploration and analysis, help model restoration management alternatives, create “data-based story-telling”, and communicate potential insights to help make effective restoration management decisions; RMarkdown-generated reports can help create reproducible research (McKay, 2020).
° Malloff, J., & Shackelford, N. (2024). Feeling the Pulse: Monitoring methods and initial outcomes in oak meadow ecosystems. Restoration Futures Lab at the University of Victoria.
° McKay, S. K. (2020). Data visualization for ecological analysis and restoration. US Army Corp of Engineers:Ecosystem Management and Restoration Research Program (EMRRP) Webinar Series. https://cw-environment.erdc.dren.mil/webinars/20Feb5-EcoMod-DataViz.pdf
I spoke to Vanessa Brownlee, Habitat Restoration Coordinator at Habitat Acquisition Trust (HAT), during their 2025-08-27 Social Gathering, who expressed interest in my proposed project idea, wanted me to send her more information about what I had in mind, and seemed willing to consider me starting in Fall 2025, with the understanding that interactions will be limited and data will not be available until later in October. I also later spoke briefly to Board Chair Andy MacKinnon, who seemed keen to know of my interest in doing my RNS Final Project with HAT and looks forward to learning more. I’m prepared to be guided by HAT’s goals, preferences, timing, and data protocols, with Nancy Shackelford’s RNS guidance and support.
I propose to create a customized coding and reporting tool for non-coders, with tutorial instructions, using open-source R packages to format and interactively visualize data collected at multiple sites for HAT Garry Oak Ecosystem Monitoring (GOEM) Program. Based on questions HAT wants the tool to help answer about the data, it will provide an interactive way to communicate information about the data and help determine any patterns through analysis. This project proposal was created using R code in RMarkdown, to showcase some visualizations tools and reports that could be created, after adapting code to reflect HAT data. This may also be a method model to compare multiple GOEM Projects using the same measurement parameters.
goemR package.Figure 1: Project method workflow diagram for ER390 data visualization deliverables for HAT
Figure 2: Gantt Chart for Proposed ER390 Timeline, Sep 2025-Jul 2026
Loading Data
# Load data and create 2 data frames
# Load Site Data
goe_eccc <- read.csv("data/SiteData-TEST-GOE-Monitor.csv", header = TRUE, sep = ",")
# Load Site Details
Sites_eccc <- read.csv("data/SiteDetails-TEST-GOE-Monitor.csv", header = TRUE, sep = ",")
Data Cleaning and Transformation
# create new column with proportions changed to percentage as a whole number
Percentage_ns <- goe_eccc$Proportion_of_native_species * 100
# add-new column for Percentages
goe_eccc <- cbind(goe_eccc, Percentage_ns)
# arrange row order of site names for binding 2 dataframes
Sites_eccc_1 <- Sites_eccc %>% arrange(Sites_eccc$Site)
goe_eccc_1 <- goe_eccc %>% arrange(goe_eccc$Site)
## make sure both data file columns have same data type str()
## make sure they have the same number of rows e.g. length(unique(goe_eccc_1$Site))
# bind 2 dataframes together by columns
goe_eccc_sites <- cbind(Sites_eccc_1, goe_eccc_1)
# Remove duplicate columns resulting from binding 2 data frames
goe_eccc_sites_1 <- goe_eccc_sites[c(-9,-10)]
# Rename columns to remove dot-format
names(goe_eccc_sites_1)[names(goe_eccc_sites_1) == "Land.Manager"] <- "Land_Manager"
names(goe_eccc_sites_1)[names(goe_eccc_sites_1) == "Main.Restoration.Type"] <- "Main_Restoration_Type"
names(goe_eccc_sites_1)[names(goe_eccc_sites_1) == "Restoration.Intensity"] <- "Restoration_Intensity"
names(goe_eccc_sites_1)[names(goe_eccc_sites_1) == "Area.ha"] <- "Area_ha"
# write csv file with combined data
## creates new data file used for creating visualizations
write.csv(goe_eccc_sites_1, "data/goe_eccc_all_site_data.csv", row.names = FALSE)
| Subregion | Site | Land.Manager | Main.Restoration.Type | Restoration.Intensity | Area.ha | Lat | Lng |
|---|---|---|---|---|---|---|---|
| Gulf Islands | Anniversary Island | GINPR | herbivore reduction | high | 4.39 | 48.82292 | -123.1823 |
| Gulf Islands | AVNR | Saltspring conservancy | herbivore reduction | minimal | 20.54 | 48.80351 | -123.4425 |
| Saanich Peninsula | Bear Hill Park | CRD | invasive removal | low | 3.80 | 48.54639 | -123.4078 |
| Gulf Islands | Brackman Island | GINPR | invasive removal | high | 4.41 | 48.71897 | -123.3864 |
| Saanich Peninsula | Camas Hill | HAT | invasive removal | high | 10.10 | 48.40173 | -123.5975 |
| Gulf Islands | Crows Nest | Trinity Western University | herbivore reduction | high | 15.34 | 48.78237 | -123.4612 |
| Subregion | Site | Proportion_of_native_species | Cultural_species_richness | Exotic_species | Trampling | Herbivory | Composite_Index | Year | Percentage_ns |
|---|---|---|---|---|---|---|---|---|---|
| Gulf Islands | Anniversary Island | 0.94 | 2.71 | 0.17 | 5.00 | 1.14 | 1.8 | 2023 | 94 |
| Gulf Islands | AVNR | 0.55 | 1.30 | 57.19 | 4.70 | 36.50 | 0.6 | 2023 | 55 |
| Saanich Peninsula | Bear Hill Park | 0.62 | 1.86 | 24.46 | 7.57 | 9.50 | 1.0 | 2023 | 62 |
| Gulf Islands | Brackman Island | 0.77 | 2.80 | 11.17 | 5.40 | 0.00 | 2.0 | 2023 | 77 |
| Saanich Peninsula | Camas Hill | 0.61 | 2.43 | 27.19 | 7.71 | 4.71 | 1.4 | 2023 | 61 |
| Gulf Islands | Crows Nest | 0.66 | 1.07 | 31.51 | 1.64 | 26.71 | 1.0 | 2023 | 66 |
Figures 3,4,5: Example Data Table Formats, with Table Head showing only first 6 rows.
Figure 6: Interactive Leaflet Map with Example Sites Data (Malloff & Shackelford, 2024).
Figure 7: Violin / bar plot compares variables of 2 Subregions
Figure 8: Point Plot of Restoration Intensity of Example Sites, coloured by Subregion.