From 141b92392a1adbfe3267cf7d0471260b8968d91a Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 28 Aug 2024 16:24:23 +0200 Subject: [PATCH] Bugfix: Add conditions for decadal plots and fix forecast time definition --- modules/Visualization/R/plot_ensemble_mean.R | 4 +- modules/Visualization/R/plot_metrics.R | 44 +++++++++++++++++++- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index 08a894ea..19521f7d 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -123,7 +123,7 @@ plot_ensemble_mean <- function(recipe, fcst, mask = NULL, dots = NULL, outdir, o "\n", "Forecast Ensemble Mean / ", "Init.: ", i_syear) } if (is.null(attributes(fcst$attrs$time_bounds))) { - if (tolower(recipe$Analysis$Horizon) == "seasonal") { + if (tolower(recipe$Analysis$Horizon) %in% c("seasonal", "decadal")) { time_labels <- lubridate::month(fcst$attrs$Dates[1, 1, which(start_date == i_syear), ], label = T, abb = F) } else if (tolower(recipe$Analysis$Horizon) == "subseasonal") { @@ -251,7 +251,7 @@ plot_ensemble_mean <- function(recipe, fcst, mask = NULL, dots = NULL, outdir, o toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), "\n", "Ensemble Mean / ", - time_labels[i], + time_labels[i], " ", years[i], " / Start date: ", i_syear) } diff --git a/modules/Visualization/R/plot_metrics.R b/modules/Visualization/R/plot_metrics.R index 15ce05e6..8904ed57 100644 --- a/modules/Visualization/R/plot_metrics.R +++ b/modules/Visualization/R/plot_metrics.R @@ -52,9 +52,12 @@ plot_metrics <- function(recipe, data_cube, metrics, weeks <- paste0(0, ftime_min:ftime_max) # This week_label appears on the name of the file. It's just the start date. week_label <- recipe$Analysis$Time$sdate - } else { ## ? + } else { # Decadal init_month <- 1 init_week <- 1 + months <- lubridate::month(Subset(data_cube$attrs$Dates, + "syear", indices = 1), + label = T, abb = F,locale = "en_GB") } if (!is.null(recipe$Analysis$Workflow$Visualization$projection)) { @@ -358,8 +361,45 @@ plot_metrics <- function(recipe, data_cube, metrics, year(ymd(start_date)))) # "/ valid week", format(weeks[i], # "%Y-%m-%d"), "/", hcst_period) + } else if (recipe$Analysis$Horizon == "decadal") { + # Case without time aggregation: + if (is.null(attributes(data_cube$attrs$time_bounds))) { + forecast_time <- match(months[i], month.name) + floor((i - 1)/12)*12 + forecast_time <- sprintf("%02d", forecast_time) + # Define plot title + toptitle <- paste(system_name, "/", + str_to_title(var_long_name), + "\n", display_name, "/", months[i], "/", + hcst_period) + } else { + if (length(attributes(data_cube$attrs$time_bounds)$plotting_attr) > 1) { + forecast_time_ini <- attributes(data_cube$attrs$time_bounds)$plotting_attr$ini[i] + forecast_time_end <- attributes(data_cube$attrs$time_bounds)$plotting_attr$end[i] + # labels for file name: + forecast_time <- paste0(forecast_time_ini, "-", forecast_time_end) + # title names: + forecast_time_ini <- init_month + forecast_time_ini - 1 + forecat_time_ini <- ifelse(forecast_time_ini > 12, forecast_time_ini - 12, forecast_time_ini) + forecast_time_ini <- month.name[forecast_time_ini] + forecast_time_end <- init_month + forecast_time_end - 1 + forecat_time_end <- ifelse(forecast_time_end > 12, forecast_time_end - 12, forecast_time_end) + forecast_time_end <- month.name[forecast_time_end] + toptitle <- paste(system_name, "/", + str_to_title(var_long_name), + "\n", display_name, "/", forecast_time_ini, "to", + forecast_time_end, "/", + hcst_period) + } else { + forecast_time <- attributes(data_cube$attrs$time_bounds)$plotting_attr[[1]][i] + toptitle <- paste(system_name, "/", + str_to_title(var_long_name), + "\n", display_name, "/", + forecast_time, "/", + hcst_period) + } + } } else { - warning("Plotting decadal?") + warning("Unknown time horizon?") } # Modify base arguments base_args[[1]] <- metric[i, , ] -- GitLab