Skip to content

Commit c0b5734

Browse files
committed
Streamline ScalesList$set_palettes() method
1 parent 0901257 commit c0b5734

File tree

1 file changed

+18
-25
lines changed

1 file changed

+18
-25
lines changed

R/scales-.R

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -175,38 +175,31 @@ ScalesList <- ggproto("ScalesList", NULL,
175175
if (!is.null(scale$palette)) {
176176
next
177177
}
178-
elem <- calc_element(paste0(
179-
"palette.", scale$aesthetics[1], ".",
180-
if (scale$is_discrete()) "discrete" else "continuous"
181-
), theme)
182-
183-
# TODO: ideally {scales} would have some sort of `as_palette()` function
184-
# String might be a name for a palette function
185-
if (is_bare_string(elem)) {
186-
elem <- get0(paste0("pal_", elem), mode = "function")
187-
if (is.function(elem)) {
188-
elem <- elem()
189-
}
190-
}
191178

192-
if (is.atomic(elem) && !is.null(elem)) {
193-
if (scale$is_discrete()) {
194-
elem <- pal_manual(elem)
195-
} else if (is.character(elem)) {
196-
elem <- pal_gradient_n(elem)
197-
} else {
198-
elem <- pal_rescale(range = rep(elem, length.out = 2))
199-
}
200-
}
179+
# Resolve palette theme setting for this scale
180+
type <- if (scale$is_discrete()) "discrete" else "continuous"
181+
elem <- paste0("palette.", scale$aesthetics[1], ".", type)
182+
elem <- calc_element(elem, theme)
201183

184+
# Resolve the palette itself
202185
elem <- elem %||% fallback_palette(scale)
203-
204-
if (!is.function(elem)) {
186+
palette <- switch(
187+
type,
188+
discrete = as_discrete_pal(elem),
189+
continuous = as_continuous_pal(elem)
190+
)
191+
if (!is.function(palette)) {
205192
cli::cli_warn(
206193
"Failed to find palette for {.field {scale$aesthetics[1]}} scale."
207194
)
208195
}
209-
scale$palette <- elem
196+
197+
# Set palette to scale
198+
# Note: while direct assignment is not ideal, we've already cloned the
199+
# scale at the beginning of the plot build method, so it doesn't affect
200+
# other plots
201+
scale$palette <- palette
202+
invisible()
210203
}
211204
}
212205
)

0 commit comments

Comments
 (0)