|
| 1 | +#' iTerm color palettes |
| 2 | +#' |
| 3 | +#' ANSI terminal color palettes sourced from the iterm2-color-schemes project. |
| 4 | +#' Each theme provides normal and bright variants. |
| 5 | +#' |
| 6 | +#' @param palette Palette name. See [iterm_palettes()] for available options. |
| 7 | +#' @param variant Variant of the palette. One of `"normal"`, `"bright"`. |
| 8 | +#' @param alpha Transparency level, a real number in (0, 1]. |
| 9 | +#' See `alpha` in [grDevices::rgb()] for details. |
| 10 | +#' |
| 11 | +#' @export pal_iterm |
| 12 | +#' |
| 13 | +#' @importFrom grDevices col2rgb rgb |
| 14 | +#' @importFrom scales manual_pal |
| 15 | +#' |
| 16 | +#' @references |
| 17 | +#' <https://github.com/mbadolato/iTerm2-Color-Schemes> |
| 18 | +#' |
| 19 | +#' @examples |
| 20 | +#' library("scales") |
| 21 | +#' show_col(pal_iterm("Rose Pine")(6)) |
| 22 | +#' show_col(pal_iterm("Rose Pine", variant = "bright", alpha = 0.7)(6)) |
| 23 | +pal_iterm <- function(palette = iterm_palettes(), variant = c("normal", "bright"), alpha = 1) { |
| 24 | + palette <- match.arg(palette) |
| 25 | + variant <- match.arg(variant) |
| 26 | + |
| 27 | + if (alpha > 1L || alpha <= 0L) stop("alpha must be in (0, 1]") |
| 28 | + |
| 29 | + raw_cols <- ggsci_db_iterm[[palette]][[variant]] |
| 30 | + raw_cols_rgb <- col2rgb(raw_cols) |
| 31 | + alpha_cols <- rgb( |
| 32 | + raw_cols_rgb[1L, ], raw_cols_rgb[2L, ], raw_cols_rgb[3L, ], |
| 33 | + alpha = alpha * 255L, names = names(raw_cols), |
| 34 | + maxColorValue = 255L |
| 35 | + ) |
| 36 | + |
| 37 | + manual_pal(unname(alpha_cols)) |
| 38 | +} |
| 39 | + |
| 40 | +#' iTerm color scales |
| 41 | +#' |
| 42 | +#' See [pal_iterm()] for details. |
| 43 | +#' |
| 44 | +#' @inheritParams pal_iterm |
| 45 | +#' @param ... Additional parameters for [ggplot2::discrete_scale()]. |
| 46 | +#' |
| 47 | +#' @export scale_color_iterm |
| 48 | +#' |
| 49 | +#' @importFrom ggplot2 discrete_scale |
| 50 | +#' |
| 51 | +#' @rdname scale_iterm |
| 52 | +#' |
| 53 | +#' @examples |
| 54 | +#' example_scatterplot() + scale_color_iterm("Rose Pine") |
| 55 | +#' example_barplot() + scale_fill_iterm("Rose Pine") |
| 56 | +scale_color_iterm <- function(palette = iterm_palettes(), variant = c("normal", "bright"), alpha = 1, ...) { |
| 57 | + palette <- match.arg(palette) |
| 58 | + variant <- match.arg(variant) |
| 59 | + if (is_ggplot2_350()) { |
| 60 | + discrete_scale("colour", palette = pal_iterm(palette, variant, alpha), ...) |
| 61 | + } else { |
| 62 | + discrete_scale("colour", scale_name = "iterm", palette = pal_iterm(palette, variant, alpha), ...) |
| 63 | + } |
| 64 | +} |
| 65 | + |
| 66 | +#' @export scale_colour_iterm |
| 67 | +#' @rdname scale_iterm |
| 68 | +scale_colour_iterm <- scale_color_iterm |
| 69 | + |
| 70 | +#' @export scale_fill_iterm |
| 71 | +#' @importFrom ggplot2 discrete_scale |
| 72 | +#' @rdname scale_iterm |
| 73 | +scale_fill_iterm <- function(palette = iterm_palettes(), variant = c("normal", "bright"), alpha = 1, ...) { |
| 74 | + palette <- match.arg(palette) |
| 75 | + variant <- match.arg(variant) |
| 76 | + if (is_ggplot2_350()) { |
| 77 | + discrete_scale("fill", palette = pal_iterm(palette, variant, alpha), ...) |
| 78 | + } else { |
| 79 | + discrete_scale("fill", scale_name = "iterm", palette = pal_iterm(palette, variant, alpha), ...) |
| 80 | + } |
| 81 | +} |
0 commit comments