Skip to content

Commit ea7e840

Browse files
authored
Merge pull request #67 from nanxstats/iterm
Add iTerm color scale
2 parents 21f2089 + 208ace7 commit ea7e840

16 files changed

+8621
-1
lines changed

DESCRIPTION

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ Authors@R: c(
99
person("Clara", "Jégousse", email = "cat3@hi.is", role = "ctb"),
1010
person("Hui", "Chen", email = "huichen@zju.edu.cn", role = "ctb"),
1111
person("Miaozhu", "Li", email = "miaozhu.li@duke.edu", role = "ctb"),
12-
person("Winston", "Chang", role = c("ctb", "cph"), comment = "staticimports.R")
12+
person("iTerm2-Color-Schemes contributors", role = c("ctb", "cph"),
13+
comment = "iTerm2-Color-Schemes project"),
14+
person("Winston", "Chang", role = c("ctb", "cph"),
15+
comment = "staticimports.R")
1316
)
1417
Maintainer: Nan Xiao <me@nanx.me>
1518
Description: A collection of 'ggplot2' color palettes inspired by

NAMESPACE

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
export(example_barplot)
44
export(example_scatterplot)
5+
export(iterm_palettes)
56
export(pal_aaas)
67
export(pal_atlassian)
78
export(pal_bmj)
@@ -13,6 +14,7 @@ export(pal_frontiers)
1314
export(pal_futurama)
1415
export(pal_gsea)
1516
export(pal_igv)
17+
export(pal_iterm)
1618
export(pal_jama)
1719
export(pal_jco)
1820
export(pal_lancet)
@@ -44,6 +46,7 @@ export(scale_color_frontiers)
4446
export(scale_color_futurama)
4547
export(scale_color_gsea)
4648
export(scale_color_igv)
49+
export(scale_color_iterm)
4750
export(scale_color_jama)
4851
export(scale_color_jco)
4952
export(scale_color_lancet)
@@ -71,6 +74,7 @@ export(scale_colour_frontiers)
7174
export(scale_colour_futurama)
7275
export(scale_colour_gsea)
7376
export(scale_colour_igv)
77+
export(scale_colour_iterm)
7478
export(scale_colour_jama)
7579
export(scale_colour_jco)
7680
export(scale_colour_lancet)
@@ -98,6 +102,7 @@ export(scale_fill_frontiers)
98102
export(scale_fill_futurama)
99103
export(scale_fill_gsea)
100104
export(scale_fill_igv)
105+
export(scale_fill_iterm)
101106
export(scale_fill_jama)
102107
export(scale_fill_jco)
103108
export(scale_fill_lancet)

NEWS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
and `scale_fill_primer()` (#62, #63).
77
- Add the Atlassian Design System palette in `scale_color_atlassian()`
88
and `scale_fill_atlassian()` (#64).
9+
- Add 400+ iTerm palettes in `scale_color_iterm()` and `scale_fill_iterm()` (#67).
910

1011
## Improvements
1112

R/discrete-iterm.R

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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

Comments
 (0)