From 8c893bea570ead4db6692184f7ce0997c7c976fd Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Fri, 11 Oct 2024 12:07:55 +0200 Subject: [PATCH 01/13] Add 'mask' to description and fucntion call and include checks in VizEquiMap.R --- R/VizEquiMap.R | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/R/VizEquiMap.R b/R/VizEquiMap.R index 54f97c2..9712c07 100644 --- a/R/VizEquiMap.R +++ b/R/VizEquiMap.R @@ -122,6 +122,9 @@ #'@param dot_size Scale factor for the dots/symbols to be plotted, specified #' in 'dots'. If a single value is specified, it will be applied to all #' layers in 'dots'. Takes 1 by default. +#'@param mask An array with the same dimensions as 'data' of [0, 1] or logical +#' indicating the grids to not plot data. The value 0 or FALSE is the point not +#' to be plotted. #'@param arr_subsamp Subsampling factor to select a subset of arrows in #' 'varu' and 'varv' to be drawn. Only one out of arr_subsamp arrows will #' be drawn. Takes 1 by default. @@ -257,7 +260,7 @@ VizEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, contours = NULL, brks2 = NULL, contour_lwd = 0.5, contour_color = 'black', contour_lty = 1, contour_draw_label = TRUE, contour_label_scale = 1, - dots = NULL, dot_symbol = 4, dot_size = 1, + dots = NULL, dot_symbol = 4, dot_size = 1, mask = NULL, arr_subsamp = floor(length(lon) / 30), arr_scale = 1, arr_ref_len = 15, arr_units = "m/s", arr_scale_shaft = 1, arr_scale_shaft_angle = 1, @@ -789,6 +792,31 @@ VizEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, stop("Parameter 'dot_size' does not contain enough sizes.") } } + + # Check mask + if (!is.null(mask)) { + mask <- drop(mask) + if (!is.array(mask) || any(!names(dim(mask)) %in% c(lon_dim, lat_dim))) { + stop("Parameter 'mask' must have two dimensions named as longitude and latitude dimensions in 'data'.") + } else { + mask <- aperm(mask, match(names(dim(mask)), c(lon_dim, lat_dim))) + } + if (!identical(dim(mask), dim(data))) { + stop("Parameter 'mask' must have the same dimensions as 'data'.") + } else if (is.numeric(mask)) { + if (all(mask %in% c(0, 1))) { + mask <- array(as.logical(mask), dim = dim(mask)) + } else { + stop("Parameter 'mask' must have only TRUE/FALSE or 0/1.") + } + } else if (is.logical(mask)) { + if (!all(mask %in% c(T, F))) { + stop("Parameter 'mask' must have only TRUE/FALSE or 0/1.") + } + } else { + stop("Parameter 'mask' must be a logical or numerical array.") + } + } # Check arrow parameters if (!is.numeric(arr_subsamp)) { -- GitLab From 0c7e47564872c981b1c44aafa411fac0d90338f2 Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Mon, 14 Oct 2024 17:41:17 +0200 Subject: [PATCH 02/13] Add mask to VizEquiMap.R --- R/VizEquiMap.R | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/R/VizEquiMap.R b/R/VizEquiMap.R index 9712c07..20de2ed 100644 --- a/R/VizEquiMap.R +++ b/R/VizEquiMap.R @@ -125,6 +125,7 @@ #'@param mask An array with the same dimensions as 'data' of [0, 1] or logical #' indicating the grids to not plot data. The value 0 or FALSE is the point not #' to be plotted. +#'@param mask_color Color of the mask. The default value is 'white'. #'@param arr_subsamp Subsampling factor to select a subset of arrows in #' 'varu' and 'varv' to be drawn. Only one out of arr_subsamp arrows will #' be drawn. Takes 1 by default. @@ -260,7 +261,8 @@ VizEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, contours = NULL, brks2 = NULL, contour_lwd = 0.5, contour_color = 'black', contour_lty = 1, contour_draw_label = TRUE, contour_label_scale = 1, - dots = NULL, dot_symbol = 4, dot_size = 1, mask = NULL, + dots = NULL, dot_symbol = 4, dot_size = 1, + mask = NULL, mask_color = 'white', arr_subsamp = floor(length(lon) / 30), arr_scale = 1, arr_ref_len = 15, arr_units = "m/s", arr_scale_shaft = 1, arr_scale_shaft_angle = 1, @@ -796,7 +798,7 @@ VizEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, # Check mask if (!is.null(mask)) { mask <- drop(mask) - if (!is.array(mask) || any(!names(dim(mask)) %in% c(lon_dim, lat_dim))) { + if (!is.array(mask) || any(!names(dim(mask)) %in% c(lon_dim, lat_dim))) { ## check stop("Parameter 'mask' must have two dimensions named as longitude and latitude dimensions in 'data'.") } else { mask <- aperm(mask, match(names(dim(mask)), c(lon_dim, lat_dim))) @@ -1155,6 +1157,46 @@ VizEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, lwd = dot_size[counter] * 3 / sqrt(sqrt(length(var)))) } } + + # + # Adding a mask + # ~~~~~~~~~~~~~~~ + # + if (!is.null(mask)){ + + mask_logical <- as.logical(mask) + + for (i in 1:length(mask_logical)) { + if (!mask_logical[i]) { + + # Calculate the longitude and latitude indices + lon_idx <- (i - 1) %% length(lon) + 1 + lat_idx <- ceiling(i / length(lon)) + + # Get the longitude and latitude for this point + lon_current <- lon[lon_idx] + lat_current <- lat[lat_idx] + + # Coordinates for the corners of the rectangle (entire grid cell) + lon_min <- ifelse(lon_idx == 1, + lon_current - (lon[2] - lon[1])/2, + (lon[lon_idx] + lon[lon_idx - 1]) / 2) + lon_max <- ifelse(lon_idx == length(lon), + lon_current + (lon[lon_idx] - lon[lon_idx - 1])/2, + (lon[lon_idx + 1] + lon[lon_idx]) / 2) + lat_min <- ifelse(lat_idx == 1, + lat_current - (lat[2] - lat[1])/2, + (lat[lat_idx] + lat[lat_idx - 1]) / 2) + lat_max <- ifelse(lat_idx == length(lat), + lat_current + (lat[lat_idx] - lat[lat_idx - 1])/2, + (lat[lat_idx + 1] + lat[lat_idx]) / 2) + + # Draw a rectangle over the masked area + rect(lon_min, lat_min, lon_max, lat_max, col = mask_color, border = NA) + } + } + } + # # Plotting continents # ~~~~~~~~~~~~~~~~~~~~~ -- GitLab From 5df445287aaef06f0895376ea300571e507db5c0 Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Tue, 15 Oct 2024 10:33:44 +0200 Subject: [PATCH 03/13] Only reorder mask dimensions if they don't match data dimension order --- R/VizEquiMap.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/R/VizEquiMap.R b/R/VizEquiMap.R index 20de2ed..f4883e4 100644 --- a/R/VizEquiMap.R +++ b/R/VizEquiMap.R @@ -801,7 +801,9 @@ VizEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, if (!is.array(mask) || any(!names(dim(mask)) %in% c(lon_dim, lat_dim))) { ## check stop("Parameter 'mask' must have two dimensions named as longitude and latitude dimensions in 'data'.") } else { - mask <- aperm(mask, match(names(dim(mask)), c(lon_dim, lat_dim))) + if (!identical(names(dim(mask)), names(dim(data)))) { + mask <- aperm(mask, match(names(dim(mask)), c(lon_dim, lat_dim))) + } } if (!identical(dim(mask), dim(data))) { stop("Parameter 'mask' must have the same dimensions as 'data'.") -- GitLab From 02c5f953a04a9d81ea0f6a3a65041f62239cdabf Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Tue, 15 Oct 2024 13:00:13 +0200 Subject: [PATCH 04/13] Add mask check in test-VizEquiMap.R --- tests/testthat/test-VizEquiMap.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/testthat/test-VizEquiMap.R b/tests/testthat/test-VizEquiMap.R index 6cedf48..69e8b01 100644 --- a/tests/testthat/test-VizEquiMap.R +++ b/tests/testthat/test-VizEquiMap.R @@ -172,6 +172,12 @@ test_that("1. Input checks", { "Parameter 'dots' must be a logical array with two or three dimensions." ) + # Check mask + expect_error( + VizEquiMap(var = data1, lon = lons1, lat = lats1, mask = "test"), + "Parameter 'mask' must have two dimensions named as longitude and latitude dimensions in 'data'." + ) + # Check arrow parameters expect_error( VizEquiMap(var = data1, lon = lons1, lat = lats1, arr_subsamp = "test"), -- GitLab From f16e6414eec82abfda6e3d24e6e5816101acfe3c Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Tue, 15 Oct 2024 13:12:18 +0200 Subject: [PATCH 05/13] Fix documentation in VizEquiMap.R --- R/VizEquiMap.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/VizEquiMap.R b/R/VizEquiMap.R index f4883e4..4d63df6 100644 --- a/R/VizEquiMap.R +++ b/R/VizEquiMap.R @@ -122,7 +122,7 @@ #'@param dot_size Scale factor for the dots/symbols to be plotted, specified #' in 'dots'. If a single value is specified, it will be applied to all #' layers in 'dots'. Takes 1 by default. -#'@param mask An array with the same dimensions as 'data' of [0, 1] or logical +#'@param mask An array with the same dimensions as 'var' of [0, 1] or logical #' indicating the grids to not plot data. The value 0 or FALSE is the point not #' to be plotted. #'@param mask_color Color of the mask. The default value is 'white'. -- GitLab From 6f4c7d3d55dc3e7cd488bb4376e3a9ee7e458bff Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Tue, 15 Oct 2024 13:13:03 +0200 Subject: [PATCH 06/13] Add documentation of new parameters in man/VizEquiMap.Rd --- man/VizEquiMap.Rd | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/man/VizEquiMap.Rd b/man/VizEquiMap.Rd index 15a8fa5..7fadb87 100644 --- a/man/VizEquiMap.Rd +++ b/man/VizEquiMap.Rd @@ -41,6 +41,8 @@ VizEquiMap( dots = NULL, dot_symbol = 4, dot_size = 1, + mask = NULL, + mask_color = "white" arr_subsamp = floor(length(lon)/30), arr_scale = 1, arr_ref_len = 15, @@ -225,6 +227,12 @@ additional accepted options.} in 'dots'. If a single value is specified, it will be applied to all layers in 'dots'. Takes 1 by default.} +\item{mask}{An array with the same dimensions as 'var' of [0, 1] or logical +indicating the grids to not plot data. The value 0 or FALSE is the point not +to be plotted.} + +\item{mask_color}{Color of the mask. The default value is 'white'.} + \item{arr_subsamp}{Subsampling factor to select a subset of arrows in 'varu' and 'varv' to be drawn. Only one out of arr_subsamp arrows will be drawn. Takes 1 by default.} -- GitLab From 7d8fd508b541285427b195f503e8cd78d48a1838 Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Tue, 15 Oct 2024 15:20:41 +0200 Subject: [PATCH 07/13] Add check for 'mask_color' in VizEquiMap.R --- R/VizEquiMap.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/R/VizEquiMap.R b/R/VizEquiMap.R index 4d63df6..c60ded3 100644 --- a/R/VizEquiMap.R +++ b/R/VizEquiMap.R @@ -821,6 +821,12 @@ VizEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, stop("Parameter 'mask' must be a logical or numerical array.") } } + + if (!is.null(mask_color)) { + if (!.IsColor(mask_color)) { + stop("Parameter 'mask_color' must be a valid colour identifier.") + } + } # Check arrow parameters if (!is.numeric(arr_subsamp)) { -- GitLab From 764caa5c4733c79c3da9741e020a5291621c1121 Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Tue, 15 Oct 2024 17:18:04 +0200 Subject: [PATCH 08/13] Reorder mask dimensions according to data dimensions --- R/VizEquiMap.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/VizEquiMap.R b/R/VizEquiMap.R index c60ded3..59c90c3 100644 --- a/R/VizEquiMap.R +++ b/R/VizEquiMap.R @@ -798,11 +798,11 @@ VizEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, # Check mask if (!is.null(mask)) { mask <- drop(mask) - if (!is.array(mask) || any(!names(dim(mask)) %in% c(lon_dim, lat_dim))) { ## check + if (!is.array(mask) || any(!names(dim(mask)) %in% c(lon_dim, lat_dim))) { stop("Parameter 'mask' must have two dimensions named as longitude and latitude dimensions in 'data'.") } else { if (!identical(names(dim(mask)), names(dim(data)))) { - mask <- aperm(mask, match(names(dim(mask)), c(lon_dim, lat_dim))) + mask <- aperm(mask, match(names(dim(mask)), names(dim(data)))) } } if (!identical(dim(mask), dim(data))) { -- GitLab From 9df027d111236fd063d69ed2c9d289b486e02246 Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Tue, 15 Oct 2024 17:20:06 +0200 Subject: [PATCH 09/13] Add title to 'mask_color' check --- R/VizEquiMap.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/VizEquiMap.R b/R/VizEquiMap.R index 59c90c3..f1708c8 100644 --- a/R/VizEquiMap.R +++ b/R/VizEquiMap.R @@ -822,6 +822,7 @@ VizEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, } } + # Check mask_color if (!is.null(mask_color)) { if (!.IsColor(mask_color)) { stop("Parameter 'mask_color' must be a valid colour identifier.") -- GitLab From 504170088937fad74b97cf3c229cf2f7deda4d2c Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Wed, 16 Oct 2024 13:47:15 +0200 Subject: [PATCH 10/13] Bugfix in mask checks in VizEquiMap.R --- R/VizEquiMap.R | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/R/VizEquiMap.R b/R/VizEquiMap.R index f1708c8..9700dfd 100644 --- a/R/VizEquiMap.R +++ b/R/VizEquiMap.R @@ -799,14 +799,14 @@ VizEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, if (!is.null(mask)) { mask <- drop(mask) if (!is.array(mask) || any(!names(dim(mask)) %in% c(lon_dim, lat_dim))) { - stop("Parameter 'mask' must have two dimensions named as longitude and latitude dimensions in 'data'.") + stop("Parameter 'mask' must have two dimensions named as longitude and latitude dimensions in 'var'.") } else { - if (!identical(names(dim(mask)), names(dim(data)))) { - mask <- aperm(mask, match(names(dim(mask)), names(dim(data)))) + if (!identical(names(dim(mask)), names(dim(var)))) { + mask <- aperm(mask, match(names(dim(mask)), names(dim(var)))) } } - if (!identical(dim(mask), dim(data))) { - stop("Parameter 'mask' must have the same dimensions as 'data'.") + if (!identical(dim(mask), dim(var))) { + stop("Parameter 'mask' must have the same dimensions as 'var'.") } else if (is.numeric(mask)) { if (all(mask %in% c(0, 1))) { mask <- array(as.logical(mask), dim = dim(mask)) -- GitLab From 93f65491e0da76a1c90bdcde7fe420c53eeb69db Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Thu, 17 Oct 2024 10:27:25 +0200 Subject: [PATCH 11/13] Update test-VizEquiMap.R to match previous bugfix --- R/VizEquiMap.R | 2 +- tests/testthat/test-VizEquiMap.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R/VizEquiMap.R b/R/VizEquiMap.R index 9700dfd..2633ceb 100644 --- a/R/VizEquiMap.R +++ b/R/VizEquiMap.R @@ -799,7 +799,7 @@ VizEquiMap <- function(var, lon, lat, varu = NULL, varv = NULL, if (!is.null(mask)) { mask <- drop(mask) if (!is.array(mask) || any(!names(dim(mask)) %in% c(lon_dim, lat_dim))) { - stop("Parameter 'mask' must have two dimensions named as longitude and latitude dimensions in 'var'.") + stop("Parameter 'mask' must have two dimensions named as the longitude and latitude dimensions in 'var'.") } else { if (!identical(names(dim(mask)), names(dim(var)))) { mask <- aperm(mask, match(names(dim(mask)), names(dim(var)))) diff --git a/tests/testthat/test-VizEquiMap.R b/tests/testthat/test-VizEquiMap.R index 69e8b01..0dfe16a 100644 --- a/tests/testthat/test-VizEquiMap.R +++ b/tests/testthat/test-VizEquiMap.R @@ -175,7 +175,7 @@ test_that("1. Input checks", { # Check mask expect_error( VizEquiMap(var = data1, lon = lons1, lat = lats1, mask = "test"), - "Parameter 'mask' must have two dimensions named as longitude and latitude dimensions in 'data'." + "Parameter 'mask' must have two dimensions named as the longitude and latitude dimensions in 'var'." ) # Check arrow parameters -- GitLab From c49b366aebd8a9e256d6e167818006072f8c2bd6 Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Thu, 31 Oct 2024 15:41:22 +0100 Subject: [PATCH 12/13] Snapshot of plot with mask: tests/testthat/_snaps/VizEquiMap/VizEquiMap_mask.png --- .../_snaps/VizEquiMap/VizEquiMap_mask.png | Bin 0 -> 53193 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/testthat/_snaps/VizEquiMap/VizEquiMap_mask.png diff --git a/tests/testthat/_snaps/VizEquiMap/VizEquiMap_mask.png b/tests/testthat/_snaps/VizEquiMap/VizEquiMap_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..0b46675e7bc3ccc7e48c5afc70f8fe67c669d694 GIT binary patch literal 53193 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 a?|~Vj@a~yUpGL4J68hRkS|u7ML;nZGFMGQH literal 0 HcmV?d00001 -- GitLab From 25d10b595e4d596d0eee752d548e148d292d9cf7 Mon Sep 17 00:00:00 2001 From: ARIADNA BATALLA FERRES Date: Thu, 31 Oct 2024 15:42:14 +0100 Subject: [PATCH 13/13] Add mask snapshot check in tests/testthat/test-VizEquiMap.R --- tests/testthat/test-VizEquiMap.R | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/testthat/test-VizEquiMap.R b/tests/testthat/test-VizEquiMap.R index 0dfe16a..8ae3f21 100644 --- a/tests/testthat/test-VizEquiMap.R +++ b/tests/testthat/test-VizEquiMap.R @@ -348,6 +348,16 @@ test_that("2. Output checks", { name = 'VizEquiMap_filled.continents.png' ) + # check mask + mask <- array(rep(c(rep(0, 60), rep(1, 60)), 10), dim = c(lat = 30, lon = 44)) + expect_snapshot_file( + save_fun(var = data1, lon = lons1, lat = lats1, filled.continents = F, + bar_limits = c(0, 10), toptitle = "plot 1", + cols = cols_white_red1, colNA = "grey", triangle_ends = c(F, F), + mask = mask), + name = 'VizEquiMap_mask.png' + ) + # check title_scale expect_snapshot_file( save_fun(var = data1, lon = lons1, lat = lats1, filled.continents = F, -- GitLab