14 Structure & Function: Size Structure of Fish Community

Data Type: Tabular Data (within eco_indicators)

Spatial Scope: Maritimes

Duration 1970-2022

Source: Bundy et al. 2017

14.1 Introduction to Indicator

The eco_indicators dataset provides indicators of ecosystem structure with focus on the size structure of the fish community (Bundy, Gomez, and Cook 2017).

  • Mean Length (Biomass): Mean length of fish, weighted by biomass.
  • Mean Length (Abundance): Mean length of fish, weighted by abundance.

Changes in mean length are indicative of changes to community structure and function. Decreases in mean length might indicate pressure from harvesting of large individuals or resource limitations. Alternatively, increases in mean length could indicate increases in resource availability for resident species, increases in metabolism due to environmental change, or filtering of small individuals through recruitment-limiting factors.

14.2 View Data


library(tidyr)
library(plotly)
library(stringr)

plotly_df <- data@data %>% inner_join(global_cols3)

# function to create plot with dropdown menu ------------------------------
make_size_dropdown_plot <- function(df,
year_col   = "year",
region_col = "region",
value_suffix = "_value") {
  
  # convert to long format
  long <- df %>%
    janitor::clean_names() %>%
    pivot_longer(
      cols = ends_with(value_suffix),
      names_to = "metric",
      values_to = "value"
    ) %>%
    # remove suffix
    mutate(
      metric = str_remove(metric, "_value")
    ) %>%
    # drop NAs (some regions don't have data for some variables or years)
    tidyr::drop_na(value)
  
  # find all metrics and regions
  metrics <- unique(long$metric)
  regions <- unique(long[[region_col]])
  
  # clean names for dropdown panels, helper
  pretty_label <- function(x) str_to_title(gsub("_", " ", x))
  
  # build plot -----------------
  p <- plot_ly()
  
  # Add line traces
  for (metric_i in seq_along(metrics)) {
    m <- metrics[metric_i]
    
    for (region_i in regions) {
      dat <- long %>%
        filter(metric == m, .data[[region_col]] == region_i) 
      
      group_name <- unique(dat$region_group)
      color <- unique(dat$color)
      linetype <- unique(dat$linetype)
      width <- unique(dat$linewidth)
      
      # If a region truly has no data for that metric, add an empty trace
      # (keeps trace indexing stable)
      if (nrow(dat) == 0) {
        dat <- tibble::tibble(!!year_col := integer(0), value = numeric(0))
      }
      
      p <- p %>% add_lines(
        data = dat,
        x = ~.data[[year_col]],
        y = ~value,
        name = as.character(region_i),
        legendgroup = group_name,
        legendgrouptitle = list(
          text = ifelse(group_name == "ESS",
                        "Eastern Scotian Shelf Zones",
                        "Western Scotian Shelf Zones"
          )),
        showlegend = (metric_i == 1),
        visible = (metric_i == 1),
        line = list(color = color, dash = linetype),
        hovertemplate = paste0("<b>", region_i,":</b> ","%{y:.3f}<extra></extra>")      )
      
    }
  }
  
  n_regions <- length(regions)
  n_traces  <- length(metrics) * n_regions
  
  buttons <- lapply(seq_along(metrics), function(metric_i) {
    vis <- rep(FALSE, n_traces)
    shl <- rep(FALSE, n_traces)
    
    idx_start <- (metric_i - 1) * n_regions + 1
    idx_end   <- metric_i * n_regions
    vis[idx_start:idx_end] <- TRUE
    shl[idx_start:idx_end] <- TRUE
    
    list(
      method = "update",
      args = list(
        list(visible = vis, showlegend = shl),
        list(
          title = pretty_label(metrics[metric_i]),
          yaxis = list(title =  pretty_label(metrics[metric_i]),
                       fixedrange=TRUE)
        )
      ),
      label = pretty_label(metrics[metric_i])
    )
  })
  
  p %>%
    layout(
      barmode = "stack",
      hovermode = "x unified",
      title = pretty_label(metrics[1]),
      xaxis = list(title = str_to_title(year_col)),  # keep one bar per year
      yaxis = list(title = pretty_label(metrics[1]), 
                   fixedrange = TRUE),
      legend = list(
        x = 1.02, xanchor = "left",
        y = 1,    yanchor = "top",
        groupclick = "toggleitem",
        itemdoubleclick = FALSE
      ),
      updatemenus = list(list(
        type = "dropdown",
        x = -.1, xanchor = "left",
        y = 1.15, yanchor = "top",
        buttons = buttons
      )),
      margin = list(r = 180, t = 80)
    )
}

# usage:
p <- make_size_dropdown_plot(plotly_df)
p <- p %>% config(displayModeBar= F)

p

Figure 14.1: Size Structure Indicators in all NAFO regions and Scotian Shelf regions overall. Use dropdown menu to select indicator, and click legend to isolate regions.

14.4 Relevance to Research and Stock Assessments

Decreases in mean length of fish are directly relevant to fisheries and stock assessments, although they can be interpreted as both an effect of fisheries activities, and having consequences on future fisheries.

Decreasing size structure of the fish community indicates that large individuals are not as common as they once were. This trend is, in part, linked to harvesting activities (Bell et al. 2018), but could also be related to resource limitations and changes in suitability across space. Because large fish have disporportionately higher reproductive output than smaller fish (Barneche et al. 2018), decreasing average size also has implications for community replenishment and resilience.

14.5 Variable Definitions

Table 14.2: Definitions of eco_indicators size structure variables.
variable description unit
year Year of trawl survey
region Region over which values are summarized
MeanLengthBIOMASS_value Average length of fish, weighted by biomass cm
MeanLengthABUNDANCE_value Average length of fish, weighted by abundance cm

14.6 Additional Data

Size Structure variables (within eco_indicators) contain data for 4VN, 4VS, 4W, 4X, ESS, and WSS. All are shown on this page, but note that NAFO divisions are nested within Scotian Shelf regions.

14.7 Get the Data

library(marea)
data('eco_indicators')
plot(eco_indicators)

References

Barneche, Diego R, D Ross Robertson, Craig R White, and Dustin J Marshall. 2018. “Fish Reproductive-Energy Output Increases Disproportionately with Body Size.” Science 360 (6389): 642–45.
Bell, Richard J, Jeremy S Collie, Trevor A Branch, Michael J Fogarty, Coilin Minto, and Daniel Ricard. 2018. “Changes in the Size Structure of Marine Fish Communities.” ICES Journal of Marine Science 75 (1): 102–12.
Bundy, Alida, Catalina Gomez, and Adam M. Cook. 2017. “Guidance Framework for the Selection and Evaluation of Ecological Indicators.” Canadian Technical Report of Fisheries and Aquatic Sciences 3232. Dartmouth, Nova Scotia, Canada: Fisheries; Oceans Canada, Bedford Institute of Oceanography. https://waves-vagues.dfo-mpo.gc.ca/Library/40648886.pdf.