Add fallback and initiative "default"

This commit is contained in:
gnoblet 2023-02-19 22:33:08 -05:00
parent 2fae078357
commit 26dc4470c4

201
R/scale.R
View file

@ -1,6 +1,6 @@
#' Color scale constructor for REACH or AGORA colors #' Color scale constructor for REACH or AGORA colors
#' #'
#' @param initiative Either "reach" or "agora. #' @param initiative Either "reach" or "agora" or "default".
#' @param palette Palette name from `pal_reach()` or `pal_agora()`. #' @param palette Palette name from `pal_reach()` or `pal_agora()`.
#' @param discrete Boolean indicating whether color aesthetic is discrete or not. #' @param discrete Boolean indicating whether color aesthetic is discrete or not.
#' @param reverse Boolean indicating whether the palette should be reversed. #' @param reverse Boolean indicating whether the palette should be reversed.
@ -11,24 +11,85 @@
#' @return A color scale for ggplot #' @return A color scale for ggplot
#' #'
#' @export #' @export
scale_color <- function(initiative = "reach", palette = "main", discrete = TRUE, reverse = FALSE, reverse_guide = TRUE, ...) { scale_color <- function(initiative = "reach", palette = "main", discrete = TRUE, reverse = FALSE, reverse_guide = TRUE, ...) {
if (initiative == "reach") { if (initiative == "reach") {
pal <- pal_reach(
palette = palette, pal <- pal_reach(palette)
reverse = reverse,
color_ramp_palette = TRUE, if (is.null(pal)) {
show_palettes = FALSE
pal <- pal_fallback(
reverse = reverse,
discrete = discrete,
color_ramp_palette = TRUE)
rlang::warn(
c(
paste0("There is no palette '", palette, "' for the selected initiative. Fallback to pal_fallback()."),
"i" = paste0("Use `pal_reach(show_palettes = TRUE)` to see the list of available palettes.")
)
) )
if (discrete) palette <- "viridis" else palette <- "magma"
} else {
pal <- pal_reach(
palette = palette,
reverse = reverse,
color_ramp_palette = TRUE,
show_palettes = FALSE
)
}
} else if (initiative == "agora") { } else if (initiative == "agora") {
pal <- pal_agora(
palette = palette, pal <- pal_agora(palette)
if (is.null(pal)) {
pal <- pal_fallback(
reverse = reverse,
discrete = discrete,
color_ramp_palette = TRUE)
rlang::warn(
c(
paste0("There is no palette '", palette, "' for the selected initiative. Fallback to pal_fallback()."),
"i" = paste0("Use `pal_reach(show_palettes = TRUE)` to see the list of available palettes.")
)
)
if (discrete) palette <- "viridis" else palette <- "magma"
} else {
pal <- pal_agora(
palette = palette,
reverse = reverse,
color_ramp_palette = TRUE,
show_palettes = FALSE
)
}
} else if (initiative == "default") {
pal <- pal_fallback(
reverse = reverse, reverse = reverse,
color_ramp_palette = TRUE, discrete = discrete,
show_palettes = FALSE color_ramp_palette = TRUE)
)
if (discrete) palette <- "viridis" else palette <- "magma"
} else { } else {
rlang::abort(c("Wrong initiative parameter input", "*" = paste0(initiative, "is not an option"), "i" = "Parameter 'initiative' should be one of 'reach' or 'agora'")) rlang::abort(
c(
paste0("There is no initiative '", initiative, "."),
"i" = paste0("initiative should be either 'reach', 'agora' or 'default'")
)
)
} }
if (discrete) { if (discrete) {
@ -41,8 +102,10 @@ scale_color <- function(initiative = "reach", palette = "main", discrete = TRUE
draw.ulim = TRUE, draw.ulim = TRUE,
draw.llim = TRUE, draw.llim = TRUE,
ticks.colour = "#F1F3F5", ticks.colour = "#F1F3F5",
reverse = reverse_guide), reverse = reverse_guide
...) ),
...
)
} else { } else {
ggplot2::scale_color_gradientn( ggplot2::scale_color_gradientn(
colours = pal(256), colours = pal(256),
@ -53,7 +116,8 @@ scale_color <- function(initiative = "reach", palette = "main", discrete = TRUE
ticks.colour = "#F1F3F5", ticks.colour = "#F1F3F5",
reverse = reverse_guide reverse = reverse_guide
), ),
...) ...
)
} }
} }
@ -61,7 +125,7 @@ scale_color <- function(initiative = "reach", palette = "main", discrete = TRUE
#' Fill scale constructor for REACH or AGORA colors #' Fill scale constructor for REACH or AGORA colors
#' #'
#' @param initiative Either "reach" or "agora. #' @param initiative Either "reach" or "agora" or "default".
#' @param palette Palette name from `pal_reach()` or `pal_agora()`. #' @param palette Palette name from `pal_reach()` or `pal_agora()`.
#' @param discrete Boolean indicating whether color aesthetic is discrete or not. #' @param discrete Boolean indicating whether color aesthetic is discrete or not.
#' @param reverse Boolean indicating whether the palette should be reversed. #' @param reverse Boolean indicating whether the palette should be reversed.
@ -72,29 +136,90 @@ scale_color <- function(initiative = "reach", palette = "main", discrete = TRUE
#' @return A fill scale for ggplot. #' @return A fill scale for ggplot.
#' #'
#' @export #' @export
scale_fill <- function(initiative = "reach", palette = "main", discrete = TRUE, reverse = FALSE, reverse_guide = TRUE, ...) { scale_fill <- function(initiative = "reach", palette = "main", discrete = TRUE, reverse = FALSE, reverse_guide = TRUE, ...) {
if (initiative == "reach") { if (initiative == "reach") {
pal <- pal_reach(
palette = palette, pal <- pal_reach(palette)
reverse = reverse,
color_ramp_palette = TRUE, if (is.null(pal)) {
show_palettes = FALSE
) pal <- pal_fallback(
reverse = reverse,
discrete = discrete,
color_ramp_palette = TRUE)
rlang::warn(
c(
paste0("There is no palette '", palette, "' for the selected initiative. Fallback to pal_fallback()."),
"i" = paste0("Use `pal_reach(show_palettes = TRUE)` to see the list of available palettes.")
)
)
if (discrete) palette <- "viridis" else palette <- "magma"
} else {
pal <- pal_reach(
palette = palette,
reverse = reverse,
color_ramp_palette = TRUE,
show_palettes = FALSE
)
}
} else if (initiative == "agora") { } else if (initiative == "agora") {
pal <- pal_agora(
palette = palette, pal <- pal_agora(palette)
if (is.null(pal)) {
pal <- pal_fallback(
reverse = reverse,
discrete = discrete,
color_ramp_palette = TRUE)
rlang::warn(
c(
paste0("There is no palette '", palette, "' for the selected initiative. Fallback to pal_fallback()."),
"i" = paste0("Use `pal_reach(show_palettes = TRUE)` to see the list of available palettes.")
)
)
if (discrete) palette <- "viridis" else palette <- "magma"
} else {
pal <- pal_agora(
palette = palette,
reverse = reverse,
color_ramp_palette = TRUE,
show_palettes = FALSE
)
}
} else if (initiative == "default") {
pal <- pal_fallback(
reverse = reverse, reverse = reverse,
color_ramp_palette = TRUE, discrete = discrete,
show_palettes = FALSE color_ramp_palette = TRUE)
)
if (discrete) palette <- "viridis" else palette <- "magma"
} else { } else {
rlang::abort(c("Wrong initiative parameter input", "*" = paste0(initiative, "is not an option"), "i" = "Parameter 'initiative' should be one of 'reach' or 'agora'")) rlang::abort(
c(
paste0("There is no initiative '", initiative, "."),
"i" = paste0("initiative should be either 'reach', 'agora' or 'default'")
)
)
} }
if (discrete) { if (discrete) {
ggplot2::discrete_scale( ggplot2::discrete_scale(
"fill", "colour",
paste0(initiative, "_", palette), paste0(initiative, "_", palette),
palette = pal, palette = pal,
guide = ggplot2::guide_legend( guide = ggplot2::guide_legend(
@ -102,17 +227,21 @@ scale_fill <- function(initiative = "reach", palette = "main", discrete = TRUE,
draw.ulim = TRUE, draw.ulim = TRUE,
draw.llim = TRUE, draw.llim = TRUE,
ticks.colour = "#F1F3F5", ticks.colour = "#F1F3F5",
reverse = reverse_guide), reverse = reverse_guide
...) ),
...
)
} else { } else {
ggplot2::scale_fill_gradientn( ggplot2::scale_color_gradientn(
colours = pal(256), colours = pal(256),
guide = ggplot2::guide_colorbar( guide = ggplot2::guide_colorbar(
title.position = "top", title.position = "top",
draw.ulim = TRUE, draw.ulim = TRUE,
draw.llim = TRUE, draw.llim = TRUE,
ticks.colour = "#F1F3F5", ticks.colour = "#F1F3F5",
reverse = reverse_guide), reverse = reverse_guide
...) ),
...
)
} }
} }