From 10a1f2ca20a343b0a8a8a3a1068a4407554e9d33 Mon Sep 17 00:00:00 2001 From: Sam Schiano <125507018+Schiano-NOAA@users.noreply.github.com> Date: Wed, 25 Feb 2026 15:02:14 -0500 Subject: [PATCH 1/3] add interaction to timeseries plot line --- R/utils_plot.R | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/R/utils_plot.R b/R/utils_plot.R index 87a500eb..8c4bd6b5 100644 --- a/R/utils_plot.R +++ b/R/utils_plot.R @@ -89,7 +89,7 @@ plot_timeseries <- function( x = .data[[x]], ymin = estimate_lower, ymax = estimate_upper, - fill = group_var + fill = interaction(model, group_var) ), alpha = 0.3 ) + @@ -99,9 +99,9 @@ plot_timeseries <- function( ggplot2::aes( x = .data[[x]], y = .data[[y]], - linetype = group_var, + # linetype = group_var, # linetype = ifelse(!is.null(group), group_var, "solid"), - color = model + color = interaction(model, group_var) ), # linewidth = 1.0, ... @@ -122,14 +122,26 @@ plot_timeseries <- function( ) # Add labels to axis and legend - labs <- plot + ggplot2::labs( - x = xlab, - y = ylab, - color = "Model", - linetype = cap_first_letter(group), - fill = cap_first_letter(group), - shape = cap_first_letter(group) - ) + if (length(unique(dat$model)) > 1 & !is.null(group)) { + labs <- plot + ggplot2::labs( + x = xlab, + y = ylab + # color = "Model", + # linetype = cap_first_letter(group), + # fill = cap_first_letter(group), + # shape = cap_first_letter(group) + ) + + ggplot2::theme(legend.title = ggplot2::element_blank()) + } else { + labs <- plot + ggplot2::labs( + x = xlab, + y = ylab, + color = "Model", + linetype = cap_first_letter(group), + fill = cap_first_letter(group), + shape = cap_first_letter(group) + ) + } # Remove linetype or point when there is no grouping if (is.null(group) & length(unique(dat$model)) == 1) { From 1fa996cfbc6bcf1149d57425710582d533aa03b2 Mon Sep 17 00:00:00 2001 From: Sam Schiano <125507018+Schiano-NOAA@users.noreply.github.com> Date: Wed, 25 Feb 2026 15:53:16 -0500 Subject: [PATCH 2/3] remove duplicated plot_timeseries --- R/utils_plot.R | 178 ------------------------------------------------- 1 file changed, 178 deletions(-) diff --git a/R/utils_plot.R b/R/utils_plot.R index 8c4bd6b5..921df943 100644 --- a/R/utils_plot.R +++ b/R/utils_plot.R @@ -194,184 +194,6 @@ plot_timeseries <- function( #------------------------------------------------------------------------------ -#' Create plot with error -#' -#' @param dat filtered data frame from standard output file(s) preformatted for -#' the target label from \link[stockplotr]{filter_data} -#' @param x a string of the column name of data used to plot on the x-axis (default -#' is "year") -#' @param y a string of the column name of data used to plot on the y-axis (default -#' is "estimate") -#' @param geom type of geom to use for plotting found in ggplot2 (e.g. "point", -#' "line", etc.). Default is "line". Other options are "point" and "area". -#' @param xlab a string of the x-axis label (default is "Year") -#' @param ylab a string of the y-axis label. If NULL, it will be set to the name -#' of `y`. -#' @param group a string of a single column that groups the data (e.g. "fleet", -#' "sex", "area", etc.). Currently can only have one level of grouping. -#' @param facet a string or vector of strings of a column that facets the data -#' (e.g. "year", "area", etc.) -#' @param ... inherited arguments from internal functions from ggplot2::geom_xx -#' -#' -#' @returns Create a time series plot for a stock assessment report. The user -#' has options to create a line, point, or area plot where the x-axis is year -#' and Y can vary for any time series quantity. Currently, grouping is -#' restricted to one group where faceting can be any number of facets. -#' @export -#' -#' @examples -#' \dontrun{ -#' plot_timeseries(dat, -#' x = "year", -#' y = "estimate", -#' geom = "line", -#' xlab = "Year", -#' ylab = "Biomass", -#' group = "fleet", -#' facet = "area" -#' ) -#' } -plot_timeseries <- function( - dat, - x = "year", - y = "estimate", - geom = "line", - xlab = "Year", - ylab = NULL, - group = NULL, - facet = NULL, - ... -) { - # Start plot - plot <- ggplot2::ggplot() - # make into new geom? - # more defaults and fxnality for ggplot - - # Add geom - plot <- switch(geom, - "point" = { - point_size <- ifelse( - is.null(list(...)$size), - 2.0, - list(...)$size - ) - plot + - ggplot2::geom_point( - data = dat, - ggplot2::aes( - .data[[x]], - .data[[y]], - # TODO: add more groupings - # shape = ifelse(any(grepl("shape", names(group))), .data[[group[[grep("shape", names(group))]]]], 1), - # color = ifelse(any(grepl("color", names(group))), .data[[group[[grep("color", names(group))]]]], "black") - color = model, - shape = group_var - ), - # size = point_size, - ... - ) - }, - "line" = { - plot + - ggplot2::geom_ribbon( - dat = dat |> dplyr::filter(!is.na(estimate_lower)), - ggplot2::aes( - x = .data[[x]], - ymin = estimate_lower, - ymax = estimate_upper - ), - colour = "grey", - alpha = 0.3 - ) + - ggplot2::geom_line( - data = dat, - ggplot2::aes( - .data[[x]], - .data[[y]], - linetype = group_var, - # linetype = ifelse(!is.null(group), group_var, "solid"), - color = model - ), - # linewidth = 1.0, - ... - ) - }, - "area" = { - plot + - ggplot2::geom_area( - data = dat, - ggplot2::aes( - x = .data[[x]], - y = .data[[y]], - fill = model - ), - ... - ) - } - ) - - # Add labels to axis and legend - labs <- plot + ggplot2::labs( - x = xlab, - y = ylab, - color = "Model", - linetype = cap_first_letter(group), - fill = cap_first_letter(group), - shape = cap_first_letter(group) - ) - - # Remove linetype or point when there is no grouping - if (is.null(group)) { - labs <- switch(geom, - "line" = labs + ggplot2::guides(linetype = "none"), - "point" = labs + ggplot2::guides(shape = "none"), - # return plot if option beyond line and point for now - labs - ) - } - if (length(unique(dat$model)) == 1) { - labs <- switch(geom, - "line" = labs + ggplot2::guides(color = "none"), - "point" = labs + ggplot2::guides(color = "none"), - "area" = labs + ggplot2::guides(fill = "none"), - # return plot if option beyond line and point for now - labs - ) - } - - # Calc axis breaks - x_n_breaks <- axis_breaks(dat[[x]]) - breaks <- ggplot2::scale_x_continuous( - breaks = x_n_breaks, - guide = ggplot2::guide_axis( - minor.ticks = TRUE - ) - ) - - # Put together final plot - final <- labs + breaks + ggplot2::expand_limits(y = 0) + - ggplot2::scale_y_continuous( - labels = scales::label_comma() - ) - - # Remove legend if no group is selected - if (is.null(group) & is.data.frame(dat) & any(is.na(unique(dat$model)))) { - final <- final + ggplot2::theme(legend.position = "none") - } - - # Check if facet(s) are desired - if (!is.null(facet)) { - facet <- paste("~", paste(facet, collapse = " + ")) - facet_formula <- stats::reformulate(facet) - - final <- final + ggplot2::facet_wrap(facet_formula) - } - final -} - -#------------------------------------------------------------------------------ - #' Create plot with error #' #' @param dat filtered data frame from standard output file(s) preformatted for From da2f2c021eacef89f12f816e85cb6327fa689ce1 Mon Sep 17 00:00:00 2001 From: Sam Schiano <125507018+Schiano-NOAA@users.noreply.github.com> Date: Thu, 26 Feb 2026 17:07:43 -0500 Subject: [PATCH 3/3] update documentation for plot timeseries --- man/plot_timeseries.Rd | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/man/plot_timeseries.Rd b/man/plot_timeseries.Rd index 089bb757..2a5fb8b3 100644 --- a/man/plot_timeseries.Rd +++ b/man/plot_timeseries.Rd @@ -4,18 +4,6 @@ \alias{plot_timeseries} \title{Plot time series trends} \usage{ -plot_timeseries( - dat, - x = "year", - y = "estimate", - geom = "line", - xlab = "Year", - ylab = NULL, - group = NULL, - facet = NULL, - ... -) - plot_timeseries( dat, x = "year", @@ -55,11 +43,6 @@ of `y`.} \item{...}{inherited arguments from internal functions from ggplot2::geom_xx} } \value{ -Create a time series plot for a stock assessment report. The user -has options to create a line, point, or area plot where the x-axis is year -and Y can vary for any time series quantity. Currently, grouping is -restricted to one group where faceting can be any number of facets. - Create a time series plot for a stock assessment report. The user has options to create a line, point, or area plot where the x-axis is year and Y can vary for any time series quantity. Currently, grouping is @@ -67,8 +50,6 @@ restricted to one group where faceting can be any number of facets. } \description{ Plot time series trends - -Create plot with error } \examples{ \dontrun{ @@ -82,15 +63,4 @@ plot_timeseries(dat, facet = "area" ) } -\dontrun{ -plot_timeseries(dat, - x = "year", - y = "estimate", - geom = "line", - xlab = "Year", - ylab = "Biomass", - group = "fleet", - facet = "area" -) -} }