From 7c685c5632f459dbe411e61889978e5b4d837611 Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 30 Oct 2024 15:48:41 +0100 Subject: [PATCH 1/3] Change plot captions to include correct start date and forecast time for monthly data --- modules/Visualization/R/plot_ensemble_mean.R | 5 ++++- modules/Visualization/R/plot_metrics.R | 15 ++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/Visualization/R/plot_ensemble_mean.R b/modules/Visualization/R/plot_ensemble_mean.R index 953aafd1..cb672523 100644 --- a/modules/Visualization/R/plot_ensemble_mean.R +++ b/modules/Visualization/R/plot_ensemble_mean.R @@ -205,6 +205,7 @@ plot_ensemble_mean <- function(recipe, fcst, mask = NULL, dots = NULL, outdir, o " / Start date: ", format(as.Date(i_syear, format = "%Y%m%d"), "%d-%m-%Y")) + forecast_time_caption <- paste0("Forecast month: ", sprintf("%02d", i)) } else if (tolower(recipe$Analysis$Horizon) == 'subseasonal') { toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), @@ -212,6 +213,7 @@ plot_ensemble_mean <- function(recipe, fcst, mask = NULL, dots = NULL, outdir, o "Issued on ", format(ymd(start_date), "%d-%m-%Y"), "\n", time_labels[i], years[i]) + forecast_time_caption <- paste0("Forecast week: ", sprintf("%02d", i)) } else { toptitle <- paste0(system_name, " / ", str_to_title(var_long_name), @@ -219,6 +221,7 @@ plot_ensemble_mean <- function(recipe, fcst, mask = NULL, dots = NULL, outdir, o time_labels[i], " ", years[i], " / Start date: ", i_syear) + forecast_time_caption <- paste0("Forecast month: ", sprintf("%02d", i)) } # Define caption if (identical(fun, PlotRobinson)) { @@ -226,7 +229,7 @@ plot_ensemble_mean <- function(recipe, fcst, mask = NULL, dots = NULL, outdir, o base_args[['caption']] <- paste0("Nominal start date: ", format(ymd(start_date), "%d-%m-%Y"), "\n", - "Forecast week: ", sprintf("%02d", i), "\n", + forecast_time_caption, "\n", "Reference: ", recipe$Analysis$Datasets$Reference, "\n", "Units: ", units) } diff --git a/modules/Visualization/R/plot_metrics.R b/modules/Visualization/R/plot_metrics.R index 6ffddafc..c01ca545 100644 --- a/modules/Visualization/R/plot_metrics.R +++ b/modules/Visualization/R/plot_metrics.R @@ -52,7 +52,7 @@ 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 { # Decadal + } else { # Decadal init_month <- 1 init_week <- 1 months <- lubridate::month(Subset(data_cube$attrs$Dates, @@ -350,6 +350,8 @@ plot_metrics <- function(recipe, data_cube, metrics, hcst_period) } } + nominal_startdate_caption <- paste0("1st of ", str_to_title(month_label)) + forecast_time_caption <- paste0("Forecast month: " forecast_time) } else if (tolower(recipe$Analysis$Horizon == "subseasonal")) { # Get forecast time label forecast_time <- weeks[i] @@ -361,8 +363,9 @@ plot_metrics <- function(recipe, data_cube, metrics, paste("Valid from", format(week_valid_ini[i], "%d-%m"), "to", format(week_valid_end[i], "%d-%m"), "of", year(ymd(start_date)))) - # "/ valid week", format(weeks[i], - # "%Y-%m-%d"), "/", hcst_period) + + nominal_startdate_caption <- ymd(start_date) + forecast_time_caption <- paste0("Forecast week: ", sprintf("%02d", i)) } else if (recipe$Analysis$Horizon == "decadal") { # Case without time aggregation: if (is.null(attributes(data_cube$attrs$time_bounds))) { @@ -400,6 +403,8 @@ plot_metrics <- function(recipe, data_cube, metrics, hcst_period) } } + nominal_startdate_caption <- start_date + forecast_time_caption <- paste0("Forecast month: " forecast_time) } else { warning("Unknown time horizon?") } @@ -414,8 +419,8 @@ plot_metrics <- function(recipe, data_cube, metrics, if (identical(fun, PlotRobinson)) { ## TODO: Customize alpha and other technical details depending on the metric base_args[['caption']] <- - paste0("Nominal start date: ", ymd(start_date), "\n", - "Forecast week: ", sprintf("%02d", i), "\n", ## This is specific for subseasonal, would need a loop to specify time horizon + paste0("Nominal start date: ", nominal_startdate_caption, "\n", + forecast_time_caption, "\n", "Reference: ", recipe$Analysis$Datasets$Reference, "\n", "Units: ", data_cube$attrs$Variable$metadata[[var_name]]$units, "\n", significance_caption) -- GitLab From e035c040500406f9877cb54e8e2b3f785b979f85 Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 30 Oct 2024 15:59:05 +0100 Subject: [PATCH 2/3] Add missing comma --- modules/Visualization/R/plot_metrics.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/Visualization/R/plot_metrics.R b/modules/Visualization/R/plot_metrics.R index c01ca545..c19b91aa 100644 --- a/modules/Visualization/R/plot_metrics.R +++ b/modules/Visualization/R/plot_metrics.R @@ -351,7 +351,7 @@ plot_metrics <- function(recipe, data_cube, metrics, } } nominal_startdate_caption <- paste0("1st of ", str_to_title(month_label)) - forecast_time_caption <- paste0("Forecast month: " forecast_time) + forecast_time_caption <- paste0("Forecast month: ", forecast_time) } else if (tolower(recipe$Analysis$Horizon == "subseasonal")) { # Get forecast time label forecast_time <- weeks[i] @@ -404,7 +404,7 @@ plot_metrics <- function(recipe, data_cube, metrics, } } nominal_startdate_caption <- start_date - forecast_time_caption <- paste0("Forecast month: " forecast_time) + forecast_time_caption <- paste0("Forecast month: ", forecast_time) } else { warning("Unknown time horizon?") } -- GitLab From aca037a0b386a3b22dacd35efc1e9369714db119 Mon Sep 17 00:00:00 2001 From: vagudets Date: Mon, 4 Nov 2024 08:56:19 +0100 Subject: [PATCH 3/3] Fix bug in plot_metrics(): typo in 'forecast_time_ini' --- modules/Visualization/R/plot_metrics.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/Visualization/R/plot_metrics.R b/modules/Visualization/R/plot_metrics.R index c19b91aa..ea205d2e 100644 --- a/modules/Visualization/R/plot_metrics.R +++ b/modules/Visualization/R/plot_metrics.R @@ -384,10 +384,10 @@ plot_metrics <- function(recipe, data_cube, metrics, 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 <- 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 <- 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), -- GitLab