Merge branch 'gen-dev' into 15-add-waffle-plots
This commit is contained in:
commit
f6958ff234
5 changed files with 202 additions and 65 deletions
|
|
@ -28,7 +28,8 @@ Imports:
|
||||||
ggrepel,
|
ggrepel,
|
||||||
tidyr,
|
tidyr,
|
||||||
dplyr,
|
dplyr,
|
||||||
ggalluvial
|
ggalluvial,
|
||||||
|
viridisLite
|
||||||
Remotes:
|
Remotes:
|
||||||
github::hrbrmstr/waffle
|
github::hrbrmstr/waffle
|
||||||
Suggests: knitr, sf, tmap
|
Suggests: knitr, sf, tmap
|
||||||
|
|
|
||||||
|
|
@ -13,15 +13,9 @@ pal_agora <- function(palette = "main", reverse = FALSE, color_ramp_palette = FA
|
||||||
|
|
||||||
|
|
||||||
palettes_agora <- list(
|
palettes_agora <- list(
|
||||||
`main` = cols_agora("main_grey", "main_red", "main_lt_grey", "main_beige"),
|
`main` = cols_agora("main_bordeaux", "main_dk_beige", "main_lt_grey", "main_lt_beige"),
|
||||||
`primary` = cols_agora("main_grey", "main_red"),
|
`primary` = cols_agora("main_bordeaux", "main_dk_beige"),
|
||||||
`secondary` = cols_agora("main_lt_grey", "main_beige"),
|
`secondary` = cols_agora( "main_lt_grey", "main_lt_beige")
|
||||||
`two_dots` = cols_agora("two_dots_1", "two_dots_2"),
|
|
||||||
`two_dots_flashy` = cols_agora("two_dots_flashy_1", "two_dots_flashy_2"),
|
|
||||||
`red_main` = cols_agora("red_main_1", "red_main_2", "red_main_3", "red_main_4", "red_main_5"),
|
|
||||||
`red_alt` = cols_agora("red_alt_1", "red_alt_2", "red_alt_3", "red_alt_4", "red_alt_5"),
|
|
||||||
`iroise` = cols_agora("iroise_1", "iroise_2", "iroise_3", "iroise_4", "iroise_5"),
|
|
||||||
`discrete_6` = cols_agora("dk_grey", "red_main_1", "main_beige", "red_main_2", "lt_grey_2", "red_4")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if (show_palettes) return(names(palettes_agora))
|
if (show_palettes) return(names(palettes_agora))
|
||||||
|
|
|
||||||
19
R/pal_fallback.R
Normal file
19
R/pal_fallback.R
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
pal_fallback <- function(reverse = FALSE,
|
||||||
|
color_ramp_palette = FALSE,
|
||||||
|
discrete = FALSE,
|
||||||
|
n = 5,
|
||||||
|
...){
|
||||||
|
|
||||||
|
pal <- if(discrete) { viridisLite::viridis(n) } else {viridisLite::magma(n)}
|
||||||
|
|
||||||
|
if (reverse) pal <- rev(pal)
|
||||||
|
|
||||||
|
if (color_ramp_palette) {
|
||||||
|
rlang::check_installed("grDevices", reason = "Package \"grDevices\" needed for `pal_fallback()` with 'color_ramp_palette' set to `TRUE` to work. Please install it.")
|
||||||
|
|
||||||
|
pal <- grDevices::colorRampPalette(pal, ...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return(pal)
|
||||||
|
|
||||||
|
}
|
||||||
201
R/scale.R
201
R/scale.R
|
|
@ -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
|
||||||
...)
|
),
|
||||||
|
...
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#' @title ggplot2 theme with REACH color palettes
|
#' @title ggplot2 theme with REACH color palettes
|
||||||
#'
|
#'
|
||||||
|
#' @param initiative Either "reach" or "default".
|
||||||
#' @param palette Palette name from 'pal_reach()'.
|
#' @param palette Palette name from 'pal_reach()'.
|
||||||
#' @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.
|
||||||
|
|
@ -56,10 +57,11 @@
|
||||||
#'
|
#'
|
||||||
#' @export
|
#' @export
|
||||||
theme_reach <- function(
|
theme_reach <- function(
|
||||||
|
initiative = "reach",
|
||||||
palette = "main",
|
palette = "main",
|
||||||
discrete = TRUE,
|
discrete = TRUE,
|
||||||
reverse = FALSE,
|
reverse = FALSE,
|
||||||
font_family = "Segoe UI",
|
font_family = "segoeui",
|
||||||
title_size = 12,
|
title_size = 12,
|
||||||
title_color = cols_reach("main_grey"),
|
title_color = cols_reach("main_grey"),
|
||||||
title_font_face = "bold",
|
title_font_face = "bold",
|
||||||
|
|
@ -108,6 +110,14 @@ theme_reach <- function(
|
||||||
# To do :
|
# To do :
|
||||||
# - add facet theming
|
# - add facet theming
|
||||||
|
|
||||||
|
if (!initiative %in% c("reach", "default"))
|
||||||
|
rlang::abort(
|
||||||
|
c(
|
||||||
|
paste0("There is no initiative '", initiative, " to be used with theme_reach()."),
|
||||||
|
"i" = paste0("initiative should be either 'reach' or 'default'")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
# Basic simple theme
|
# Basic simple theme
|
||||||
# theme_reach <- ggplot2::theme_bw()
|
# theme_reach <- ggplot2::theme_bw()
|
||||||
|
|
||||||
|
|
@ -264,28 +274,12 @@ theme_reach <- function(
|
||||||
# Other parameters
|
# Other parameters
|
||||||
theme_reach <- theme_reach + ggplot2::theme(...)
|
theme_reach <- theme_reach + ggplot2::theme(...)
|
||||||
|
|
||||||
|
|
||||||
# Check if palette is an actual existing palette
|
|
||||||
pal <- pal_reach(palette)
|
|
||||||
|
|
||||||
if(is.null(pal)) {
|
|
||||||
rlang::warn(
|
|
||||||
c(
|
|
||||||
paste0("There is no palette '", palette, "' for initiative 'reach'. Fallback to REACH main palette."),
|
|
||||||
"i" = paste0("Use `pal_reach(show_palettes = TRUE)` to see the list of availabale palettes.")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
palette <- "main"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# Add reach color palettes by default
|
# Add reach color palettes by default
|
||||||
# (reversed guide is defaulted to TRUE for natural reading)
|
# (reversed guide is defaulted to TRUE for natural reading)
|
||||||
theme_reach <- list(
|
theme_reach <- list(
|
||||||
theme_reach,
|
theme_reach,
|
||||||
scale_color(palette = palette, discrete = discrete, reverse = reverse, reverse_guide = legend_reverse),
|
scale_color(initiative = initiative, palette = palette, discrete = discrete, reverse = reverse, reverse_guide = legend_reverse),
|
||||||
scale_fill(palette = palette, discrete = discrete, reverse = reverse, reverse_guide = legend_reverse)
|
scale_fill(initiative = initiative, palette = palette, discrete = discrete, reverse = reverse, reverse_guide = legend_reverse)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue