From d81f1a4e5a29c2a7efb15faa4bb352adebb76b7d Mon Sep 17 00:00:00 2001 From: Timon Date: Thu, 12 Feb 2026 08:47:30 +0100 Subject: [PATCH] Enhance cum_ci_plot function with dynamic max values for x-axis breaks --- r_app/report_utils.R | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/r_app/report_utils.R b/r_app/report_utils.R index e7e7888..02c84cd 100644 --- a/r_app/report_utils.R +++ b/r_app/report_utils.R @@ -441,6 +441,10 @@ cum_ci_plot <- function(pivotName, ci_quadrant_data = CI_quadrant, plot_type = " x_label <- switch(x_unit, "days" = if (facet_on) "Date" else "Age of Crop (Days)", "weeks" = "Week Number") + + # Calculate dynamic max values for breaks + max_doy <- max(plot_data$DOY, na.rm = TRUE) + 20 + max_week <- max(as.numeric(plot_data$week), na.rm = TRUE) + ceiling(20 / 7) # Create plot with either facets by season or overlay by DOY/week if (facet_on) { @@ -512,9 +516,9 @@ cum_ci_plot <- function(pivotName, ci_quadrant_data = CI_quadrant, plot_type = " color_scale + { if (x_var == "DOY") { - ggplot2::scale_x_continuous(breaks = seq(0, 450, by = 50), sec.axis = ggplot2::sec_axis(~ . / 30.44, name = "Age in Months", breaks = seq(0, 14, by = 1))) + ggplot2::scale_x_continuous(breaks = seq(0, max_doy, by = 50), sec.axis = ggplot2::sec_axis(~ . / 30.44, name = "Age in Months", breaks = seq(0, 14, by = 1))) } else if (x_var == "week") { - ggplot2::scale_x_continuous(breaks = seq(0, 64, by = 4), sec.axis = ggplot2::sec_axis(~ . / 4.348, name = "Age in Months", breaks = seq(0, 14, by = 1))) + ggplot2::scale_x_continuous(breaks = seq(0, max_week, by = 4), sec.axis = ggplot2::sec_axis(~ . / 4.348, name = "Age in Months", breaks = seq(0, 14, by = 1))) } } + ggplot2::theme_minimal() + @@ -565,14 +569,18 @@ cum_ci_plot <- function(pivotName, ci_quadrant_data = CI_quadrant, plot_type = " x_label <- switch(x_unit, "days" = if (facet_on) "Date" else "Age of Crop (Days)", "weeks" = "Week Number") - + # Choose color palette based on colorblind_friendly flag color_scale <- if (colorblind_friendly) { ggplot2::scale_color_brewer(type = "qual", palette = "Set2") } else { ggplot2::scale_color_discrete() } - + + # Calculate dynamic max values for breaks + max_doy_both <- max(plot_data_both$DOY, na.rm = TRUE) + 20 + max_week_both <- max(as.numeric(plot_data_both$week), na.rm = TRUE) + ceiling(20 / 7) + # Create the faceted plot g_both <- ggplot2::ggplot(data = plot_data_both) + # Add benchmark lines first (behind season lines) @@ -620,9 +628,9 @@ cum_ci_plot <- function(pivotName, ci_quadrant_data = CI_quadrant, plot_type = " color_scale + { if (x_var == "DOY") { - ggplot2::scale_x_continuous(breaks = seq(0, 450, by = 50), sec.axis = ggplot2::sec_axis(~ . / 30.44, name = "Age in Months", breaks = seq(0, 14, by = 1))) + ggplot2::scale_x_continuous(breaks = seq(0, max_doy_both, by = 50), sec.axis = ggplot2::sec_axis(~ . / 30.44, name = "Age in Months", breaks = seq(0, 14, by = 1))) } else if (x_var == "week") { - ggplot2::scale_x_continuous(breaks = seq(0, 64, by = 4), sec.axis = ggplot2::sec_axis(~ . / 4.348, name = "Age in Months", breaks = seq(0, 14, by = 1))) + ggplot2::scale_x_continuous(breaks = seq(0, max_week_both, by = 4), sec.axis = ggplot2::sec_axis(~ . / 4.348, name = "Age in Months", breaks = seq(0, 14, by = 1))) } else if (x_var == "Date") { ggplot2::scale_x_date(breaks = "1 month", date_labels = "%b-%Y", sec.axis = ggplot2::sec_axis(~ ., name = "Age in Months", breaks = scales::breaks_pretty())) }