From aa952347a49f85b473f524d1f048371b28751f3f Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Wed, 20 Sep 2023 14:45:03 +0200 Subject: [PATCH] Fix a bug in Visualization module that raised an error in the decadal case when more than 12 forecast times were plotted --- modules/Visualization/R/plot_ensemble_mean.R | 9 +++++++-- .../R/plot_most_likely_terciles_map.R | 9 +++++++-- modules/Visualization/R/plot_skill_metrics.R | 16 +++++++++++----- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index a753c23a..8a16341e 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -10,8 +10,13 @@ plot_ensemble_mean <- function(recipe, fcst, mask = NULL, dots = NULL, outdir, o system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name start_date <- paste0(recipe$Analysis$Time$fcst_year, recipe$Analysis$Time$sdate) - init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, - start = 1, stop = 2)) + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, + start = 1, stop = 2)) + } else { + ## TODO: Sort out decadal initial month (is it always January?) + init_month <- 1 + } if (!is.null(recipe$Analysis$Workflow$Visualization$projection)) { projection <- tolower(recipe$Analysis$Workflow$Visualization$projection) } else { diff --git a/modules/Visualization/R/plot_most_likely_terciles_map.R b/modules/Visualization/R/plot_most_likely_terciles_map.R index 93d36042..66006ed1 100644 --- a/modules/Visualization/R/plot_most_likely_terciles_map.R +++ b/modules/Visualization/R/plot_most_likely_terciles_map.R @@ -30,8 +30,13 @@ plot_most_likely_terciles <- function(recipe, system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name start_date <- paste0(recipe$Analysis$Time$fcst_year, recipe$Analysis$Time$sdate) - init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, - start = 1, stop = 2)) + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, + start = 1, stop = 2)) + } else { + ## TODO: Sort out decadal initial month (is it always January?) + init_month <- 1 + } # Retrieve and rearrange probability bins for the forecast if (is.null(probabilities$probs_fcst$prob_b33) || diff --git a/modules/Visualization/R/plot_skill_metrics.R b/modules/Visualization/R/plot_skill_metrics.R index 5a3eafaf..96496fb4 100644 --- a/modules/Visualization/R/plot_skill_metrics.R +++ b/modules/Visualization/R/plot_skill_metrics.R @@ -26,10 +26,19 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, system_name <- archive$System[[recipe$Analysis$Datasets$System$name]]$name hcst_period <- paste0(recipe$Analysis$Time$hcst_start, "-", recipe$Analysis$Time$hcst_end) - init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, - start = 1, stop = 2)) + if (tolower(recipe$Analysis$Horizon) == "seasonal") { + init_month <- as.numeric(substr(recipe$Analysis$Time$sdate, + start = 1, stop = 2)) + } else { + ## TODO: Sort out decadal initial month (is it always January?) + init_month <- 1 + } month_label <- tolower(month.name[init_month]) month_abbreviation <- month.abb[init_month] + # Get months + months <- lubridate::month(Subset(data_cube$attrs$Dates, + "syear", indices = 1), + label = T, abb = F) if (!is.null(recipe$Analysis$Workflow$Visualization$projection)) { projection <- tolower(recipe$Analysis$Workflow$Visualization$projection) } else { @@ -137,9 +146,6 @@ plot_skill_metrics <- function(recipe, data_cube, skill_metrics, } else { outfile <- paste0(outdir[var], name) } - # Get months - months <- unique(lubridate::month(data_cube$attrs$Dates, - label = T, abb = F)) # Get variable name and long name var_name <- data_cube$attrs$Variable$varName[[var]] var_long_name <- data_cube$attrs$Variable$metadata[[var_name]]$long_name -- GitLab