Setup code

Formatting functions

#' Format number with significant digits
#' @param signif number of significant digits
#' @param sci_notation cutoff when to start using scientific notation
#' @param sci_as_latex scientific notiation as latex
#' @param include_plus whether to include plus sign
format_with_signif <- function(x, signif = 2, sci_notation = 1e-5, sci_as_latex = FALSE, include_plus = FALSE) {
  if(signif <= 0) stop("this function only supports numbers with at least 1 significant digit")
  x <- base::signif(x, digits = signif)
  n_decimals = ifelse(x == 0, 0, log10(abs(x)))
  n_decimals = ifelse(
    n_decimals < 0,
    -floor(n_decimals) + signif - 1L,
    -ceiling(n_decimals) + signif
  )
  plus <- if(include_plus) "+" else ""
  pow <- if(sci_as_latex) "\\\\cdot{}10^{-%.0f}" else "e-%.0f"
  ifelse(
    abs(x) > sci_notation,
    sprintf(sprintf("%%%s.%0.ff", plus, n_decimals), x),
    sprintf(sprintf("%%%s.%0.ff%s", plus, signif - 1L, pow), 
            x * 10^(n_decimals - signif + 1L), (n_decimals - signif + 1L))
  )
}

Calc FAs functions

calculate_r2 <- function(x, y) {
  lm(y ~ x, data = tibble(x = x, y = y)) %>% broom::glance() %>% pull(r.squared)
}

calculate_p_val <- function(x, y) {
  lm(y ~ x, data = tibble(x = x, y = y)) %>% broom::glance() %>% pull(p.value)
}

calculate_FAs <- function(df, parent_set_name, subset_name) {
  # names of parent set and subset. this is called when importing the schematic pdf
  df %>% mutate(subset = !!subset_name,
                parent_set = !!parent_set_name) %>% 
    # complete calculation. group_by here will determine which subsets are calculated
    group_by(sample_id, .add = T) %>% # .add = T allows for original df grouping to be passed in here
    mutate(percentage = amount / sum(amount)) %>% 
    ungroup() %>% 
    # add model parameters
    group_by(methyl, cycle, pos) %>% 
    # calculate and add r2 and p-value asterisk
    mutate(
      r2 = calculate_r2(x = temp, y = percentage),
      p_value = calculate_p_val(x = temp, y = percentage),
      p_value_star = if_else(p_value >= 0.01, "*", ""),
      full_temp_p_value_star = if_else(full_temp_p_value >= 0.01, "*", ""),
      label = sprintf(
        "$\\textbf{%s}:\\,\\textit{R}^2 = %.2f%s\\,(\\textit{%.2f%s})$",
        compound, r2, p_value_star, full_temp_r2, full_temp_p_value_star
      )
    ) %>% 
    ungroup() %>% 
    arrange(cycle, methyl, pos)
}

# Same function as calculate_FAs but for conductivity
calculate_FAs_cond <- function(df, parent_set_name, subset_name) {
  # names of parent set and subset. this is called when importing the schematic pdf
  df %>% mutate(subset = !!subset_name,
                parent_set = !!parent_set_name) %>% 
    # complete calculation. group_by here will determine which subsets are calculated
    group_by(sample_id, .add = T) %>% # .add = T allows for original df grouping to be passed in here
    mutate(percentage = amount / sum(amount)) %>% 
    ungroup() %>% 
    # add model parameters
    group_by(methyl, cycle, pos) %>% 
    mutate(
      r2 = calculate_r2(x = ln_conductivity, y = percentage),
      p_value = calculate_p_val(x = ln_conductivity, y = percentage),
      p_value_star = if_else(p_value >= 0.01, "*", ""),
      full_cond_p_value_star = if_else(full_cond_p_value >= 0.01, "*", ""),
      label = sprintf(
        "$\\textbf{%s}:\\,\\textit{R}^2 = %.2f%s\\,(\\textit{%.2f%s})$",
        compound, r2, p_value_star, full_cond_r2, full_cond_p_value_star
      )
    ) %>% 
    ungroup() %>% 
    arrange(methyl, cycle, pos)
}

# Same function as calculate_FAs but for pH
calculate_FAs_pH <- function(df, parent_set_name, subset_name) {
  df %>% mutate(subset = !!subset_name,
                parent_set = !!parent_set_name) %>% 
    # complete calculation. group_by here will determine which subsets are calculated
    group_by(sample_id, .add = T) %>% # .add = T allows for original df grouping to be passed in here
    mutate(percentage = amount / sum(amount)) %>% 
    ungroup() %>% 
    # add model parameters
    group_by(methyl, cycle, pos) %>% 
    mutate(
      r2 = calculate_r2(x = pH, y = percentage),
      p_value = calculate_p_val(x = pH, y = percentage),
      p_value_star = if_else(p_value >= 0.01, "*", ""),
      full_pH_p_value_star = if_else(full_pH_p_value >= 0.01, "*", ""),
      label = sprintf(
        "$\\textbf{%s}:\\,\\textit{R}^2 = %.2f%s\\,(\\textit{%.2f%s})$",
        compound, r2, p_value_star, full_pH_r2, full_pH_p_value_star
      )
    ) %>% 
    ungroup() %>% 
    arrange(methyl, cycle, pos)
}

# Same function as calculate_FAs but for DO_mean
calculate_FAs_DO <- function(df, parent_set_name, subset_name) {
  df %>% mutate(subset = !!subset_name,
                parent_set = !!parent_set_name) %>% 
    # complete calculation. group_by here will determine which subsets are calculated
    group_by(sample_id, .add = T) %>% # .add = T allows for original df grouping to be passed in here
    mutate(percentage = amount / sum(amount)) %>% 
    ungroup() %>% 
    # add model parameters
    group_by(methyl, cycle, pos) %>% 
    mutate(
      r2 = calculate_r2(x = DO, y = percentage),
      p_value = calculate_p_val(x = DO, y = percentage),
      p_value_star = if_else(p_value >= 0.01, "*", ""),
      full_DO_p_value_star = if_else(full_DO_p_value >= 0.01, "*", ""),
      label = sprintf(
        "$\\textbf{%s}:\\,\\textit{R}^2 = %.2f%s\\,(\\textit{%.2f%s})$",
        compound, r2, p_value_star, full_DO_r2, full_DO_p_value_star
      )
    ) %>% 
    ungroup() %>% 
    arrange(methyl, cycle, pos)
}

Color schemes

# Note that many of these are reduntant since I decided to use the same colors, but they're coded in for the flexibility

grp_colors <- 
  tribble(
    ~col_grp,  ~color,
    # meth
    "meth_a_5me",             "#AADFF1",
    "meth_a_6me",             "#AADFF1",
    "meth_a_5me_noI",         "#AADFF1",
    "meth_a_6me_noI",         "#AADFF1",
    "meth_a_both_noI",        "#AADFF1",
    "meth_a_both",            "#AADFF1",
    "meth_b_5me",             "#9B85BE",
    "meth_b_6me",             "#9B85BE",
    "meth_b_5me_noI",         "#9B85BE",
    "meth_b_6me_noI",         "#9B85BE",
    "meth_b_both_noI",        "#9B85BE",
    "meth_b_both",            "#9B85BE",
    "meth_c_5me",             "#80CAA5",
    "meth_c_6me",             "#80CAA5",
    "meth_c_5me_noI",         "#80CAA5",
    "meth_c_6me_noI",         "#80CAA5",
    "meth_c_both_noI",        "#80CAA5",
    "meth_c_both",            "#80CAA5",
    # cyc
    "cyc_I_5me",     "#FCEC98",
    "cyc_I_6me",     "#FCEC98",
    "cyc_I_both",    "#FCEC98",
    "cyc_II_5me",    "#F59DB2",
    "cyc_II_6me",    "#F59DB2",
    "cyc_II_both",   "#F59DB2",
    "cyc_III_5me",   "#FBB57F",
    "cyc_III_6me",   "#FBB57F",
    "cyc_III_both",  "#FBB57F",
    # isom
    "isom_a",        "#A7A9AC",
    "isom_b",        "#A7A9AC",
    "isom_c",        "#A7A9AC",
    # combined
    "mi_a",          "#7D93AA",
    "mi_b",          "#8677A6",
    "mi_c",          "#929D79",
    "ci_I",          "#E8D9A9",
    "ci_II",         "#BD6477",
    "ci_III",        "#E18256",
    "mc_5me",          "#67ADA9",
    "mc_5me_noI",      "#67ADA9",
    "mc_6me",          "#67ADA9",
    "mc_6me_noI",      "#67ADA9",
    "full",          "#D5C7C1"
  )

Base Plots

# parent sets: meth, cyc, isom, mi, ci, mc, full
# subsets: me and cy - 5me, 6me, both
# col_grp will end up being meth_a_5me

# data base plot
base_plot <- 
  ggplot() +
  # patterned background
  geom_rect_pattern(
    data = function(df) {
      df %>%
        select(panel, compound, methyl, pos, cycle, parent_set, subset) %>%
        unique() %>%
        mutate(col_grp = case_when(parent_set == "meth" ~ paste(parent_set, cycle, subset, sep = "_"),
                                   parent_set == "cyc" ~ paste(parent_set, methyl, subset, sep = "_"),
                                   parent_set == "isom" ~ paste(parent_set, cycle, sep = "_"),
                                   parent_set == "mi" ~ paste(parent_set, cycle, sep = "_"),
                                   parent_set == "ci" ~ paste(parent_set, methyl, sep = "_"),
                                   parent_set == "mc" ~ paste(parent_set, subset, sep = "_"),
                                   parent_set == "full" ~ "full"),
               pattern = if_else(parent_set %in% c("meth", "cyc", "mc") & pos == 6 |
                                   parent_set == "isom" & methyl == "III", "yes", "no")
               ) %>%
        left_join(grp_colors, by = "col_grp")
    },
    mapping = aes(
      xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf,
      fill = color,
      pattern_fill = color,
      pattern_density = pattern
    ),
    # no pattern borders, just the stripes
    pattern_linetype = 0,
    # orientation of the stripes
    pattern_angle = 44.99, # 45 didn't work for some reason...
    # change to "crosshatch" if that looks better
    pattern = "stripe",
    # play with the alphas for relative intensity of the stripes
    pattern_alpha = 0.2,
    alpha = 0.2,
    show.legend = FALSE
  ) +
  scale_pattern_fill_identity() + 
  scale_pattern_density_manual(values = c(no = 0, yes = 0.5)) +
  # data
  geom_point(
    mapping = aes(x = env_var, y = percentage, shape = source, color = source)
  ) +
  scale_fill_identity() +
  theme(
    text = element_text(size = 16),
    panel.grid = element_blank(),
    strip.background = element_blank(),
    strip.text = element_blank(),
    legend.position = "bottom",
    legend.direction = "horizontal"
  ) +
  # corner labels, a, b, c, d, etc.
  geom_text(
    data = function(df) df %>% mutate(panel_nr = as.numeric(panel), panel_letter = paste0(letters[panel_nr],")")) %>% 
      select(panel, panel_letter, compound, methyl, pos, cycle, label) %>% unique(),
    mapping = aes(label = panel_letter, 
                  x = -Inf, y = Inf, hjust = -0.4, vjust = 1.5), parse = FALSE #x = -Inf, y = +Inf, hjust = 1.5, vjust = 1.5
  ) +
  labs(x = "Temperature", y = "Fractional Abundance within each group", shape = NULL, color = NULL)

#' function to create image row
#' @param y_width y axis relative width
create_image_row <- function(df, y_width) {
  stopifnot(!missing(df))
  stopifnot(!missing(y_width))
  imgs <-
    df %>% 
    with(case_when(parent_set == "meth" ~ file.path(imgs_folder, sprintf("meth_%s_%s.pdf", cycle, subset)),
                   parent_set == "cyc" ~ file.path(imgs_folder, sprintf("cyc_%s_%s.pdf", methyl, subset)),
                   parent_set == "isom" ~ file.path(imgs_folder, sprintf("isom_%s.pdf", cycle)),
                   parent_set == "mi" ~ file.path(imgs_folder, sprintf("mi_%s.pdf", cycle)),
                   parent_set == "ci" ~ file.path(imgs_folder, sprintf("ci_%s.pdf", methyl)),
                   parent_set == "mc" ~ file.path(imgs_folder, sprintf("mc_%s.pdf", subset)),
                   parent_set == "full" ~ file.path(imgs_folder, sprintf("full.pdf")))
         ) %>%
    unique() %>% 
    map(magick::image_read_pdf)
  img_plots <- imgs %>% map(~cowplot::ggdraw() + cowplot::draw_image(.x))
  do.call(
    plot_grid,
    c(
      list(ggdraw()), img_plots, 
      list(
        nrow = 1L,
        rel_widths = c(y_width, rep((1-y_width)/length(imgs), length(imgs)))
      )
    )
  )
}

#' function to create image row with free y-axes
#' @param y_width DEPRECATED
#' @param y_axis_label_width y axis label width
#' @param y_axes_width y axes relative width
create_image_row_2 <- function(df, y_width, y_axis_label_width = y_width/2, y_axes_width = y_width/2) {
  stopifnot(!missing(df))
  imgs <-
    df %>% 
    with(case_when(parent_set == "meth" ~ file.path(imgs_folder, sprintf("meth_%s_%s.pdf", cycle, subset)),
                   parent_set == "cyc" ~ file.path(imgs_folder, sprintf("cyc_%s_%s.pdf", methyl, subset)),
                   parent_set == "isom" ~ file.path(imgs_folder, sprintf("isom_%s.pdf", cycle)),
                   parent_set == "mi" ~ file.path(imgs_folder, sprintf("mi_%s.pdf", cycle)),
                   parent_set == "ci" ~ file.path(imgs_folder, sprintf("ci_%s.pdf", methyl)),
                   parent_set == "mc" ~ file.path(imgs_folder, sprintf("mc_%s.pdf", subset)),
                   parent_set == "full" ~ file.path(imgs_folder, sprintf("full.pdf")))
         ) %>%
    unique() %>% 
    map(magick::image_read_pdf)
  n_imgs <- length(imgs)
  img_plots <- imgs %>% map(~cowplot::ggdraw() + cowplot::draw_image(.x))
  img_plots_w_empties <- map(img_plots, ~c(list(cowplot::ggdraw()), list(.x))) %>% unlist(recursive = FALSE, use.names = FALSE)
  rel_widths <- c(y_axis_label_width, rep(c(y_axes_width, (1 - y_axis_label_width - n_imgs * y_axes_width) / n_imgs), times = n_imgs))
  do.call(
    plot_grid,
    c(list(cowplot::ggdraw()), img_plots_w_empties, list(nrow = 1L, rel_widths = rel_widths))
  )
}

#' function to create image row
#' @param y_width DEPRECATED
#' @param y_axis_label_width y axis label width
#' @param y_axes_width y axes relative width
create_image_row_adjust <- function(df, y_width, y_axis_label_width = y_width/2, y_axes_width = y_width/2) {
  stopifnot(!missing(df))
  imgs <-
    df %>% 
    with(case_when(parent_set == "meth" ~ file.path(imgs_folder, sprintf("meth_%s_%s.pdf", cycle, subset)),
                   parent_set == "cyc" ~ file.path(imgs_folder, sprintf("cyc_%s_%s.pdf", methyl, subset)),
                   parent_set == "isom" ~ file.path(imgs_folder, sprintf("isom_%s.pdf", cycle)),
                   parent_set == "mi" ~ file.path(imgs_folder, sprintf("mi_%s.pdf", cycle)),
                   parent_set == "ci" ~ file.path(imgs_folder, sprintf("ci_%s.pdf", methyl)),
                   parent_set == "mc" ~ file.path(imgs_folder, sprintf("mc_%s.pdf", subset)),
                   parent_set == "full" ~ file.path(imgs_folder, sprintf("full.pdf")))
         ) %>% 
    unique() %>% 
    map(magick::image_read_pdf)
  n_imgs <- length(imgs)
  img_plots <- imgs %>% map(~cowplot::ggdraw() + cowplot::draw_image(.x))
  img_plots_w_empties <- map(img_plots, ~c(list(cowplot::ggdraw() + theme(panel.background = element_rect(fill = "black"))), list(.x))) %>% unlist(recursive = FALSE, use.names = FALSE)
  rel_widths <- c(y_axis_label_width, rep(c(y_axes_width, (1 - y_axis_label_width - n_imgs * y_axes_width) / n_imgs), times = n_imgs))
  do.call(
    plot_grid,
    c(list(cowplot::ggdraw() + theme(panel.background = element_rect(fill = "red"))), img_plots_w_empties, list(nrow = 1L, rel_widths = rel_widths))
  )
}

#' function to create image col
#' @param y_height y axis relative height
create_image_col <- function(df, y_height, rel_heights = 1) {
  stopifnot(!missing(df))
  stopifnot(!missing(y_height))
  imgs <-
    df %>% 
    with(case_when(parent_set == "meth" ~ file.path(imgs_folder, sprintf("meth_%s_%s.pdf", cycle, subset)),
                   parent_set == "cyc" ~ file.path(imgs_folder, sprintf("cyc_%s_%s.pdf", methyl, subset)),
                   parent_set == "isom" ~ file.path(imgs_folder, sprintf("isom_%s.pdf", cycle)),
                   parent_set == "mi" ~ file.path(imgs_folder, sprintf("mi_%s.pdf", cycle)),
                   parent_set == "ci" ~ file.path(imgs_folder, sprintf("ci_%s.pdf", methyl)),
                   parent_set == "mc" ~ file.path(imgs_folder, sprintf("mc_%s.pdf", subset)),
                   parent_set == "full" ~ file.path(imgs_folder, sprintf("full.pdf")))
         ) %>%
    unique() %>% 
    map(magick::image_read_pdf)
  img_plots <- imgs %>% map(~cowplot::ggdraw() + cowplot::draw_image(.x))
  do.call(
    plot_grid,
    c(
      img_plots, list(ggdraw()), 
      list(
        ncol = 1L,
        rel_heights = c(rep((1-y_height)/length(imgs) * rel_heights/sum(rel_heights), length(imgs)), y_height)
      )
    )
  )
}

Import data

# Read and parse
ss_data_6meIs <- readxl::read_xlsx("../calibrations/outputs/comb_data_ss_avgs.xlsx") %>% 
  select(Sample_name, Region, M_above0_air, pH_mean, ln_conductivity, DO_mgperL_mean, ends_with("full"), -total_full) %>%
  # # add a "6me" version of the I's
  mutate(fIa_prime_sub_full = fIa_sub_full,
         fIb_prime_sub_full = fIb_sub_full,
         fIc_prime_sub_full = fIc_sub_full) %>%
  pivot_longer(ends_with("full"), names_to = "compound", values_to = "amount") %>% #***
  mutate(compound = str_remove(compound, "_sub_full") %>% str_remove("f"),
         compound = if_else(str_detect(compound, "prime"), str_replace(compound, "_prime", "'"), compound),
         methyl = case_when(str_detect(compound, "III") ~ "III",
                            str_detect(compound, "II") ~ "II",
                            str_detect(compound, "I") ~ "I"),
         cycle = case_when(str_detect(compound, "a") ~ "a",
                           str_detect(compound, "b") ~ "b",
                           str_detect(compound, "c") ~ "c"),
         pos = if_else(str_detect(compound, "'"), "6", "5"),
         Region2 = case_when(Region == "Baffin" ~ "Canada",
                             Region == "Switzerland" ~ "Central Europe",
                             T ~ Region)
         ) %>% 
  rename(sample_id = "Sample_name",
         source = "Region2",
         temp = "M_above0_air",
         pH = "pH_mean",
         DO = "DO_mgperL_mean") %>% 
  # renomarlize just in case
  group_by(sample_id) %>% 
  mutate(percentage = amount / sum(amount)) %>% 
  ungroup() %>% 
  # add Full r2 and p
  group_by(methyl, cycle, pos) %>% 
  mutate(
    full_temp_r2 = calculate_r2(x = temp, y = amount),
    full_temp_p_value = calculate_p_val(x = temp, y = amount),
    full_pH_r2 = calculate_r2(x = pH, y = amount),
    full_pH_p_value = calculate_p_val(x = pH, y = amount),
    full_cond_r2 = calculate_r2(x = ln_conductivity, y = amount),
    full_cond_p_value = calculate_p_val(x = ln_conductivity, y = amount),
    full_DO_r2 = calculate_r2(x = DO, y = amount),
    full_DO_p_value = calculate_p_val(x = DO, y = amount),
    panel = compound,
    source = fct_relevel(source, "Africa", "Canada", "China", "Iceland", "Central Europe")
    ) %>% 
  ungroup()

# remove the 6-methyl I's. this is the default dataframe to use, just easier to define the other one first.
ss_data <- ss_data_6meIs %>% 
  filter(!(methyl == "I" & pos == "6"))

Generate Temperature subsets

# Used in selecting the schematic and the background color:
# Valid parent_set_names = "meth", "cyc", "isom", "mi", "ci", "mc", "full". 
# Valid subset_names = "both", "5me", "6me", "5me_noI", "6me_noI", only used for the meth, cyc, and mc parent sets

# Combined sets

ss_data_full <- ss_data %>% 
  filter() %>% # filter only data you want to include in FAs
  group_by(NULL) %>% # grouping for calculating FAs
  calculate_FAs(parent_set_name = "full", subset_name = "") # names of parent set and subset. this is called when importing the schematic pdf and choosing the plot color

ss_data_mc_5me <- ss_data %>% 
  filter(methyl == "I" | pos == "5") %>%
  group_by(NULL) %>% 
  calculate_FAs("mc", "5me")

ss_data_mc_6me_noI <- ss_data %>% 
  filter(pos == "6") %>%
  group_by(NULL) %>% 
  calculate_FAs("mc", "6me_noI")

ss_data_mc_6me <- ss_data %>% 
  filter(methyl == "I" | pos == "6") %>%
  group_by(NULL) %>% 
  calculate_FAs("mc", "6me")

ss_data_mc_5me_noI <- ss_data %>% 
  filter(pos == "5" & methyl != "I") %>%
  group_by(NULL) %>% 
  calculate_FAs("mc", "5me_noI")

ss_data_mc <- ss_data_mc_5me %>% 
  bind_rows(ss_data_mc_6me_noI)

ss_data_ci <- ss_data %>% 
  group_by(methyl) %>% 
  calculate_FAs("ci", "")

ss_data_mi <- ss_data %>% 
  group_by(cycle) %>% 
  calculate_FAs("mi", "")



# Methylation sets

ss_data_meth_5me <- ss_data %>% 
  filter(methyl == "I" | pos == "5") %>% 
  group_by(cycle) %>% 
  calculate_FAs("meth", "5me") 

ss_data_meth_6me <- ss_data %>%
  filter(methyl == "I" | pos == "6") %>%
  group_by(cycle) %>%
  calculate_FAs("meth", "6me")

ss_data_meth_6me_noI <- ss_data %>% # bind_rows with ss_data_meth_5me to generate meth
  filter(pos == "6") %>%
  group_by(cycle) %>%
  calculate_FAs("meth", "6me")

ss_data_meth_5me_noI <- ss_data %>%
  filter(pos == "5", methyl != "I") %>%
  group_by(cycle) %>%
  calculate_FAs("meth", "5me")

ss_data_meth <- ss_data_meth_6me_noI %>%
  filter(methyl == "III") %>% # only plot either II or III since they're redundant
  bind_rows(ss_data_meth_5me) %>% 
  mutate(subset = "both")


# Cyclization sets

ss_data_cyc_5me <- ss_data %>%
  filter(methyl == "I" | pos == "5") %>%
  group_by(methyl) %>%
  calculate_FAs("cyc", "5me")

ss_data_cyc_6me <- ss_data %>%
  filter(methyl == "I" | pos == "6") %>%
  group_by(methyl) %>%
  calculate_FAs("cyc", "6me")

ss_data_cyc <- ss_data_cyc_5me %>% 
  bind_rows(ss_data_cyc_6me %>% filter(methyl != "I")) %>% 
  mutate(subset = "both")


# Isomer sets

ss_data_isom <- ss_data %>%
  filter(methyl != "I") %>%
  group_by(methyl, cycle) %>%
  calculate_FAs("isom", "") %>%
  filter(pos == "6") # just pick 5 or 6 since they're redundant

Generate Conductivity subsets

# Used in selecting the schematic:
# Valid parent_set_names = "meth", "cyc", "isom", "mi", "ci", "mc", "full". 
# Valid subset_names = "both", "5me", "6me", "5me_noI", "6me_noI", only used for the meth, cyc, and mc parent sets

# Combined sets

ss_data_full_cond <- ss_data %>% 
  filter() %>% # filter only data you want to include in FAs
  group_by(NULL) %>% # grouping for calculating FAs
  calculate_FAs_cond(parent_set_name = "full", subset_name = "") # names of parent set and subset. this is called when importing the schematic pdf

ss_data_mc_5me_cond <- ss_data %>% 
  filter(methyl == "I" | pos == "5") %>%
  group_by(NULL) %>% 
  calculate_FAs_cond("mc", "5me")

ss_data_mc_6me_noI_cond <- ss_data %>% 
  filter(pos == "6") %>%
  group_by(NULL) %>% 
  calculate_FAs_cond("mc", "6me_noI")

ss_data_mc_cond <- ss_data_mc_5me %>% 
  bind_rows(ss_data_mc_6me_noI)

ss_data_ci_cond <- ss_data %>% 
  group_by(methyl) %>% 
  calculate_FAs_cond("ci", "")

ss_data_mi_cond <- ss_data %>% 
  group_by(cycle) %>% 
  calculate_FAs_cond("mi", "")



# Methylation sets

ss_data_meth_5me_cond <- ss_data %>% 
  filter(methyl == "I" | pos == "5") %>% 
  group_by(cycle) %>% 
  calculate_FAs_cond("meth", "5me") 

ss_data_meth_6me_cond <- ss_data %>%
  filter(methyl == "I" | pos == "6") %>%
  group_by(cycle) %>%
  calculate_FAs_cond("meth", "6me")

ss_data_meth_6me_noI_cond <- ss_data %>% # bind_rows with meth_5me to generate meth
  filter(pos == "6") %>%
  group_by(cycle) %>%
  calculate_FAs_cond("meth", "6me")

ss_data_meth_5me_noI_cond <- ss_data %>%
  filter(pos == "5", methyl != "I") %>%
  group_by(cycle) %>%
  calculate_FAs_cond("meth", "5me")

ss_data_meth_cond <- ss_data_meth_6me_noI %>%
  filter(methyl == "III") %>% # only plot either II or III since they're redundant
  bind_rows(ss_data_meth_5me) %>% 
  mutate(subset = "both")


# Cyclization sets

ss_data_cyc_5me_cond <- ss_data %>%
  filter(methyl == "I" | pos == "5") %>%
  group_by(methyl) %>%
  calculate_FAs_cond("cyc", "5me")

ss_data_cyc_6me_cond <- ss_data %>%
  filter(methyl == "I" | pos == "6") %>%
  group_by(methyl) %>%
  calculate_FAs_cond("cyc", "6me")

ss_data_cyc_cond <- ss_data_cyc_5me %>% 
  bind_rows(ss_data_cyc_6me %>% filter(methyl != "I")) %>% 
  mutate(subset = "both")


# Isomer sets

ss_data_isom_cond <- ss_data %>%
  filter(methyl != "I") %>%
  group_by(methyl, cycle) %>%
  calculate_FAs_cond("isom", "") %>%
  filter(pos == "6") # just pick 5 or 6 since they're redundant

Generate pH subsets

# Used in selecting the schematic:
# Valid parent_set_names = "meth", "cyc", "isom", "mi", "ci", "mc", "full". 
# Valid subset_names = "both", "5me", "6me", "5me_noI", "6me_noI", only used for the meth, cyc, and mc parent sets

# Combined sets

ss_data_full_pH <- ss_data %>% 
  filter() %>% # filter only data you want to include in FAs
  group_by(NULL) %>% # grouping for calculating FAs
  calculate_FAs_pH(parent_set_name = "full", subset_name = "") # names of parent set and subset. this is called when importing the schematic pdf

ss_data_mc_5me_pH <- ss_data %>% 
  filter(methyl == "I" | pos == "5") %>%
  group_by(NULL) %>% 
  calculate_FAs_pH("mc", "5me")

ss_data_mc_6me_noI_pH <- ss_data %>% 
  filter(pos == "6") %>%
  group_by(NULL) %>% 
  calculate_FAs_pH("mc", "6me_noI")

ss_data_mc_pH <- ss_data_mc_5me %>% 
  bind_rows(ss_data_mc_6me_noI)

ss_data_ci_pH <- ss_data %>% 
  group_by(methyl) %>% 
  calculate_FAs_pH("ci", "")

ss_data_mi_pH <- ss_data %>% 
  group_by(cycle) %>% 
  calculate_FAs_pH("mi", "")



# Methylation sets

ss_data_meth_5me_pH <- ss_data %>% 
  filter(methyl == "I" | pos == "5") %>% 
  group_by(cycle) %>% 
  calculate_FAs_pH("meth", "5me") 

ss_data_meth_6me_pH <- ss_data %>%
  filter(methyl == "I" | pos == "6") %>%
  group_by(cycle) %>%
  calculate_FAs_pH("meth", "6me")

ss_data_meth_6me_noI_pH <- ss_data %>% # bind_rows with meth_5me to generate meth
  filter(pos == "6") %>%
  group_by(cycle) %>%
  calculate_FAs_pH("meth", "6me")

ss_data_meth_5me_noI_pH <- ss_data %>%
  filter(pos == "5", methyl != "I") %>%
  group_by(cycle) %>%
  calculate_FAs_pH("meth", "5me")

ss_data_meth_pH <- ss_data_meth_6me_noI %>%
  filter(methyl == "III") %>% # only plot either II or III since they're redundant
  bind_rows(ss_data_meth_5me) %>% 
  mutate(subset = "both")


# Cyclization sets

ss_data_cyc_5me_pH <- ss_data %>%
  filter(methyl == "I" | pos == "5") %>%
  group_by(methyl) %>%
  calculate_FAs_pH("cyc", "5me")

ss_data_cyc_6me_pH <- ss_data %>%
  filter(methyl == "I" | pos == "6") %>%
  group_by(methyl) %>%
  calculate_FAs_pH("cyc", "6me")

ss_data_cyc_pH <- ss_data_cyc_5me %>% 
  bind_rows(ss_data_cyc_6me %>% filter(methyl != "I")) %>% 
  mutate(subset = "both")


# Isomer sets

ss_data_isom_pH <- ss_data %>%
  filter(methyl != "I") %>%
  group_by(methyl, cycle) %>%
  calculate_FAs_pH("isom", "") %>%
  filter(pos == "6") # just pick 5 or 6 since they're redundant

Generate DO subsets

# Used in selecting the schematic:
# Valid parent_set_names = "meth", "cyc", "isom", "mi", "ci", "mc", "full". 
# Valid subset_names = "both", "5me", "6me", "5me_noI", "6me_noI", only used for the meth, cyc, and mc parent sets

# Combined sets

ss_data_full_DO <- ss_data %>% 
  filter() %>% # filter only data you want to include in FAs
  group_by(NULL) %>% # grouping for calculating FAs
  calculate_FAs_DO(parent_set_name = "full", subset_name = "") # names of parent set and subset. this is called when importing the schematic pdf

ss_data_mc_5me_DO <- ss_data %>% 
  filter(methyl == "I" | pos == "5") %>%
  group_by(NULL) %>% 
  calculate_FAs_DO("mc", "5me")

ss_data_mc_6me_noI_DO <- ss_data %>% 
  filter(pos == "6") %>%
  group_by(NULL) %>% 
  calculate_FAs_DO("mc", "6me_noI")

ss_data_mc_DO <- ss_data_mc_5me %>% 
  bind_rows(ss_data_mc_6me_noI)

ss_data_ci_DO <- ss_data %>% 
  group_by(methyl) %>% 
  calculate_FAs_DO("ci", "")

ss_data_mi_DO <- ss_data %>% 
  group_by(cycle) %>% 
  calculate_FAs_DO("mi", "")



# Methylation sets

ss_data_meth_5me_DO <- ss_data %>% 
  filter(methyl == "I" | pos == "5") %>% 
  group_by(cycle) %>% 
  calculate_FAs_DO("meth", "5me") 

ss_data_meth_6me_DO <- ss_data %>%
  filter(methyl == "I" | pos == "6") %>%
  group_by(cycle) %>%
  calculate_FAs_DO("meth", "6me")

ss_data_meth_6me_noI_DO <- ss_data %>% # bind_rows with meth_5me to generate meth
  filter(pos == "6") %>%
  group_by(cycle) %>%
  calculate_FAs_DO("meth", "6me")

ss_data_meth_5me_noI_DO <- ss_data %>%
  filter(pos == "5", methyl != "I") %>%
  group_by(cycle) %>%
  calculate_FAs_DO("meth", "5me")

ss_data_meth_DO <- ss_data_meth_6me_noI %>%
  filter(methyl == "III") %>% # only plot either II or III since they're redundant
  bind_rows(ss_data_meth_5me) %>% 
  mutate(subset = "both")


# Cyclization sets

ss_data_cyc_5me_DO <- ss_data %>%
  filter(methyl == "I" | pos == "5") %>%
  group_by(methyl) %>%
  calculate_FAs_DO("cyc", "5me")

ss_data_cyc_6me_DO <- ss_data %>%
  filter(methyl == "I" | pos == "6") %>%
  group_by(methyl) %>%
  calculate_FAs_DO("cyc", "6me")

ss_data_cyc_DO <- ss_data_cyc_5me %>% 
  bind_rows(ss_data_cyc_6me %>% filter(methyl != "I")) %>% 
  mutate(subset = "both")


# Isomer sets

ss_data_isom_DO <- ss_data %>%
  filter(methyl != "I") %>%
  group_by(methyl, cycle) %>%
  calculate_FAs_DO("isom", "") %>%
  filter(pos == "6") # just pick 5 or 6 since they're redundant

Meth and MC Subset Variations

Figure S4. Meth-5Me+

Tetramethylated compounds included

subset_df <- ss_data_meth_5me %>%
  mutate(env_var = temp) %>%
  arrange(desc(pos), methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("MAF (°C)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17 # 0.045
  p,
  ncol = 1L,
  rel_heights = c(0.17, 1)
)

Figure S5. Meth-6Me+

Tetramethylated compounds included

subset_df <- ss_data_meth_6me %>%
  mutate(pos = 6) %>% # calling the tetramethylated compounds "6-methyls"
  mutate(env_var = temp) %>%
  arrange(desc(pos), methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("MAF (°C)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17 # 0.045
  p,
  ncol = 1L,
  rel_heights = c(0.17, 1)
)

Figure S6. Meth-5Me

Tetramethylated compounds not included

subset_df <- ss_data_meth_5me_noI %>%
  mutate(subset = "5me_noI") %>% 
  mutate(env_var = temp) %>%
  arrange(desc(pos), methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("MAF (°C)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17 # 0.045
  p,
  ncol = 1L,
  rel_heights = c(0.17, 1)
)

Figure S7. Meth-6Me

Tetramethylated compounds not included

subset_df <- ss_data_meth_6me_noI %>%
  mutate(subset = "6me_noI") %>% 
  mutate(env_var = temp) %>%
  arrange(desc(pos), methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("MAF (°C)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17 # 0.045
  p,
  ncol = 1L,
  rel_heights = c(0.17, 1)
)

Figure S8. MC-5Me+

Tetramethylated compounds included

# 12x8 output without schematics
subset_df <- ss_data_mc_5me %>%
  mutate(env_var = temp) %>%
  arrange(pos, methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    #facet_grid(methyl + pos ~ cycle, scales = "free_y") + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("MAF (°C)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S9. MC-6Me+

Tetramethylated compounds included

# 12x8 output without schematics
subset_df <- ss_data_mc_6me %>%
  mutate(pos = "6") %>% 
  mutate(env_var = temp) %>%
  arrange(pos, methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    #facet_grid(methyl + pos ~ cycle, scales = "free_y") + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("MAF (°C)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S10. MC-5Me

Tetramethylated compounds not included

# 12x8 output without schematics
subset_df <- ss_data_mc_5me_noI %>%
  mutate(env_var = temp) %>%
  arrange(pos, methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    #facet_grid(methyl + pos ~ cycle, scales = "free_y") + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("MAF (°C)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S11. MC-6Me

Tetramethylated compounds not included

# 12x8 output without schematics
subset_df <- ss_data_mc_6me_noI %>%
  mutate(env_var = temp) %>%
  arrange(pos, methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    #facet_grid(methyl + pos ~ cycle, scales = "free_y") + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("MAF (°C)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Temperature (Months Above Freezing)

Figure S12. Meth

subset_df <- ss_data_meth_6me_noI %>% 
  filter(methyl == "III") %>% # II and III are just inverses, only plot one of them
  bind_rows(ss_data_meth_5me) %>% 
  mutate(subset = "both") %>% # to select the correct image
  mutate(env_var = temp) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("MAF (°C)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17 # 0.045
  p,
  ncol = 1L,
  rel_heights = c(0.17, 1)
)

Figure S13. Cyc

subset_df <- ss_data_cyc_6me %>% 
  filter(methyl != "I") %>% # avoid double-plotting
  bind_rows(ss_data_cyc_5me) %>% 
  mutate(subset = "both") %>% # to select the correct image 
  mutate(env_var = temp) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    #facet_grid(methyl + pos ~ cycle, scales = "free_y") + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("MAF (°C)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1,2,2)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S14. Isom

subset_df <- ss_data_isom %>% 
  mutate(env_var = temp) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("MAF (°C)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.18, 1)
)

Figure S15. Meth-Isom

subset_df <- ss_data_mi %>% 
  mutate(env_var = temp) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("MAF (°C)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.03, y_axes_width = 0.05), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.15, 1)
)

Figure S16. Cyc-Isom

# 12x8 output without schematics
subset_df <- ss_data_ci %>%
  mutate(env_var = temp) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    #facet_grid(methyl + pos ~ cycle, scales = "free_y") + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("MAF (°C)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1,2,2)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S17. Meth-Cyc

# 12x8 output without schematics
subset_df <- ss_data_mc_6me_noI %>%
  bind_rows(ss_data_mc_5me) %>% 
  mutate(env_var = temp) %>%
  arrange(pos, methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    #facet_grid(methyl + pos ~ cycle, scales = "free_y") + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("MAF (°C)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(3,2,0.9)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S18. Full

subset_df <- ss_data_full %>% 
  mutate(env_var = temp) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("MAF (°C)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.045, y_axes_width = 0), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.12, 1)
)

Conductivity

Figure S19. Meth

subset_df <- ss_data_meth_6me_noI_cond %>% 
  filter(methyl == "III") %>% # II and III are just inverses, only plot one of them
  bind_rows(ss_data_meth_5me_cond) %>% 
  mutate(subset = "both") %>% # to select the correct image 
  mutate(env_var = ln_conductivity) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("ln(Conductivity)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.17, 1)
)

Figure S20. Cyc

subset_df <- ss_data_cyc_6me_cond %>% 
  filter(methyl != "I") %>% # avoid double-plotting
  bind_rows(ss_data_cyc_5me_cond) %>% 
  mutate(subset = "both") %>% # to select the correct image 
  mutate(env_var = ln_conductivity) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    #facet_grid(methyl + pos ~ cycle, scales = "free_y") + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("ln(Conductivity)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1,2,2)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S21. Isom

subset_df <- ss_data_isom_cond %>% 
  mutate(env_var = ln_conductivity) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("ln(Conductivity)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.18, 1)
)

Figure S22. Meth-Isom

subset_df <- ss_data_mi_cond %>% 
  mutate(env_var = ln_conductivity) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("ln(Conductivity)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.03, y_axes_width = 0.05), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.15, 1)
)

Figure S23. Cyc-Isom

# 12x8 output without schematics
subset_df <- ss_data_ci_cond %>%
  mutate(env_var = ln_conductivity) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    #facet_grid(methyl + pos ~ cycle, scales = "free_y") + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("ln(Conductivity)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1,2,2)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S24. Meth-Cyc

subset_df <- ss_data_mc_6me_noI_cond %>%
  bind_rows(ss_data_mc_5me_cond) %>% 
  mutate(env_var = ln_conductivity) %>%
  arrange(pos, methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    #facet_grid(methyl + pos ~ cycle, scales = "free_y") + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("ln(Conductivity)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(3,2,0.9)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S25. Full

subset_df <- ss_data_full_cond %>% 
  mutate(env_var = ln_conductivity) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("ln(Conductivity)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.045, y_axes_width = 0), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.12, 1)
)

pH

Figure S26. Meth

subset_df <- ss_data_meth_6me_noI_pH %>% 
  filter(methyl == "III") %>% # II and III are just inverses, only plot one of them
  bind_rows(ss_data_meth_5me_pH) %>% 
  mutate(subset = "both") %>% # to select the correct image 
  mutate(env_var = pH) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("pH")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.17, 1)
)

Figure S27. Cyc

subset_df <- ss_data_cyc_6me_pH %>% 
  filter(methyl != "I") %>% # avoid double-plotting
  bind_rows(ss_data_cyc_5me_pH) %>% 
  mutate(subset = "both") %>% # to select the correct image 
  mutate(env_var = pH) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("pH")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1,2,2)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S28. Isom

subset_df <- ss_data_isom_pH %>% 
  mutate(env_var = pH) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("pH")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.18, 1)
)

Figure S29. Meth-Isom

subset_df <- ss_data_mi_pH %>% 
  mutate(env_var = pH) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("pH")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.03, y_axes_width = 0.05), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.15, 1)
)

Figure S30. Cyc-Isom

# 12x8 output without schematics
subset_df <- ss_data_ci_pH %>%
  mutate(env_var = pH) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("pH")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1,2,2)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S31. Meth-Cyc

subset_df <- ss_data_mc_6me_noI_pH %>%
  bind_rows(ss_data_mc_5me_pH) %>% 
  mutate(env_var = pH) %>%
  arrange(pos, methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("pH")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(3,2,0.9)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S32. Full

subset_df <- ss_data_full_pH %>% 
  mutate(env_var = pH) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("pH")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.045, y_axes_width = 0), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.12, 1)
)

Dissolved Oxygen (mean)

Figure S33. Meth

subset_df <- ss_data_meth_6me_noI_DO %>% 
  filter(methyl == "III") %>% # II and III are just inverses, only plot one of them
  bind_rows(ss_data_meth_5me_DO) %>% 
  mutate(subset = "both") %>% # to select the correct image 
  mutate(env_var = DO) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("DO (mg/L)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.17, 1)
)

Figure S34. Cyc

subset_df <- ss_data_cyc_6me_DO %>% 
  filter(methyl != "I") %>% # avoid double-plotting
  bind_rows(ss_data_cyc_5me_DO) %>% 
  mutate(subset = "both") %>% # to select the correct image 
  mutate(env_var = DO) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    #facet_grid(methyl + pos ~ cycle, scales = "free_y") + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("DO (mg/L)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1,2,2)),
  nrow = 1L,
  rel_widths = c(1, 0.16) #0.23
)

Figure S35. Isom

subset_df <- ss_data_isom_DO %>% 
  mutate(env_var = DO) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("DO (mg/L)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.034, y_axes_width = 0.062), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.18, 1)
)

Figure S36. Meth-Isom

subset_df <- ss_data_mi_DO %>% 
  mutate(env_var = DO) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("DO (mg/L)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.03, y_axes_width = 0.05), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.15, 1)
)

Figure S37. Cyc-Isom

# 12x8 output without schematics
subset_df <- ss_data_ci_DO %>%
  mutate(env_var = DO) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("DO (mg/L)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(1,2,2)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S38. Meth-Cyc

subset_df <- ss_data_mc_6me_noI_DO %>%
  bind_rows(ss_data_mc_5me_DO) %>% 
  mutate(env_var = DO) %>%
  arrange(pos, methyl, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.5)) +
    xlab("DO (mg/L)")
plot_grid(
  p,
  create_image_col(subset_df, y_height = 0.2, rel_heights = c(3,2,0.9)),
  nrow = 1L,
  rel_widths = c(1, 0.16)
)

Figure S39. Full

subset_df <- ss_data_full_DO %>% 
  mutate(env_var = DO) %>%
  arrange(methyl, pos, cycle) %>%
  mutate(panel = as_factor(label)) #panel is compound by default

# generate formatted levels
levels(subset_df$panel) <- as.character(latex2exp::TeX(levels(subset_df$panel)))

# plot
p <- base_plot %+% filter(subset_df, TRUE) + 
    facet_wrap(~panel, scales = "free_y", ncol = 3, labeller = label_parsed) +
    theme(strip.background = element_rect(fill = "gray"), strip.text = element_text(size = 10, hjust = 0.1)) +
    xlab("DO (mg/L)")
plot_grid(
  create_image_row_2(subset_df, y_axis_label_width = 0.045, y_axes_width = 0), #0.17
  p,
  ncol = 1L,
  rel_heights = c(0.12, 1)
)