From 548138ec1231fb57cfe7685b02e6e3526eff9c53 Mon Sep 17 00:00:00 2001 From: Achim Zeileis Date: Mon, 25 May 2026 16:24:09 +0200 Subject: [PATCH 1/6] use match_palette_name(theme_palette, ...) only if theme_palette is a character string --- R/by_aesthetics.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/by_aesthetics.R b/R/by_aesthetics.R index 398033469..2fa5bea73 100755 --- a/R/by_aesthetics.R +++ b/R/by_aesthetics.R @@ -156,7 +156,7 @@ resolve_palette_colors = function(palette, theme_palette, ngrps, ordered, gradie # Pick theme palette if no explicit palette provided if (is.null(palette_choice) && !is.null(theme_palette)) { palette_choice = theme_palette - if (length(theme_palette) == 1) { + if (is.character(theme_palette) && length(theme_palette) == 1) { # Check if theme palette needs to switch to sequential use_sequential = FALSE idx = match_palette_name(theme_palette, palette.pals()) From 4ef61ae4edd8a644edaa88a0f2c00e0789d112b1 Mon Sep 17 00:00:00 2001 From: Achim Zeileis Date: Mon, 25 May 2026 16:35:23 +0200 Subject: [PATCH 2/6] add NEWS item --- NEWS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS.md b/NEWS.md index a14c6dd0d..b36b16e33 100644 --- a/NEWS.md +++ b/NEWS.md @@ -94,6 +94,9 @@ visualizations. and spacing now scale correctly with `facet.cex`, multiline facet titles inter-panel gaps remain fixed regardless of strip height, and strip text is now vertically centered within the background rect. (#586 @grantmcdermott) +- Fixed Issue #593 where `palette.qualitative` in themes could not be a + function. Thanks to @katrinabrock for the report. (#594 @zeileis) + ## v0.6.1 From 1ea73f1c87f24de3220fecb31480f9e6d5867acd Mon Sep 17 00:00:00 2001 From: Achim Zeileis Date: Sun, 31 May 2026 04:29:04 +0200 Subject: [PATCH 3/6] usage of palette.sequential for ephemeral list themes --- R/by_aesthetics.R | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/R/by_aesthetics.R b/R/by_aesthetics.R index 2fa5bea73..f76278474 100755 --- a/R/by_aesthetics.R +++ b/R/by_aesthetics.R @@ -301,7 +301,11 @@ by_col = function(col, palette, alpha, by_ordered, by_continuous, ngrps, adjustc return(cols) } - pal_theme = get_tpar("palette.qualitative", default = NULL) + pal_theme = if (ordered || gradient) { + get_tpar("palette.sequential", default = NULL) + } else { + get_tpar("palette.qualitative", default = NULL) + } cols = resolve_palette_colors( palette = palette, theme_palette = pal_theme, From 3c36248c4726deae16bf812c2a44c89e274a9cda Mon Sep 17 00:00:00 2001 From: Achim Zeileis Date: Sun, 31 May 2026 18:53:24 +0200 Subject: [PATCH 4/6] handle palette functions in by_bg() as in by_col() --- R/by_aesthetics.R | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/R/by_aesthetics.R b/R/by_aesthetics.R index f76278474..5d77fdff8 100755 --- a/R/by_aesthetics.R +++ b/R/by_aesthetics.R @@ -327,9 +327,16 @@ by_bg = function(bg, fill, col, palette, alpha, by_ordered, by_continuous, ngrps bg = "by" } if (!is.null(bg) && length(bg) == 1 && is_by_keyword(bg)) { + ordered = if (is.null(by_ordered)) FALSE else by_ordered + gradient = if (is.null(by_continuous)) FALSE else by_continuous + pal_theme = if (ordered || gradient) { + get_tpar("palette.sequential", default = NULL) + } else { + get_tpar("palette.qualitative", default = NULL) + } bg = resolve_palette_colors( palette = palette, - theme_palette = get_tpar("palette.qualitative", default = NULL), + theme_palette = pal_theme, ngrps = ngrps, ordered = if (is.null(by_ordered)) FALSE else by_ordered, gradient = if (is.null(by_continuous)) FALSE else by_continuous, From d23a118ef8c988deba12558556d67f10d0a92ce0 Mon Sep 17 00:00:00 2001 From: Achim Zeileis Date: Sun, 31 May 2026 18:54:08 +0200 Subject: [PATCH 5/6] add tinytests palette functions in themese (#594) --- ...ephemeral_palette_function_qualitative.svg | 113 ++++++++++++++++++ ..._ephemeral_palette_function_sequential.svg | 95 +++++++++++++++ ...tinytheme_palette_function_qualitative.svg | 113 ++++++++++++++++++ .../tinytheme_palette_function_sequential.svg | 95 +++++++++++++++ inst/tinytest/test-tinytheme.R | 38 ++++++ 5 files changed, 454 insertions(+) create mode 100644 inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_qualitative.svg create mode 100644 inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_sequential.svg create mode 100644 inst/tinytest/_tinysnapshot/tinytheme_palette_function_qualitative.svg create mode 100644 inst/tinytest/_tinysnapshot/tinytheme_palette_function_sequential.svg diff --git a/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_qualitative.svg b/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_qualitative.svg new file mode 100644 index 000000000..e4504812e --- /dev/null +++ b/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_qualitative.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +factor(1:9) +1 +2 +3 +4 +5 +6 +7 +8 +9 + + + + + + + +Index +1:9 + + + + + + + +2 +4 +6 +8 + + + + + +2 +4 +6 +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_sequential.svg b/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_sequential.svg new file mode 100644 index 000000000..0984cb5e1 --- /dev/null +++ b/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_sequential.svg @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + 2 + 4 + 6 + 8 +- - +- - +- - +- - +1:9 + + + + + + + +Index +1:9 + + + + + + + +2 +4 +6 +8 + + + + + +2 +4 +6 +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inst/tinytest/_tinysnapshot/tinytheme_palette_function_qualitative.svg b/inst/tinytest/_tinysnapshot/tinytheme_palette_function_qualitative.svg new file mode 100644 index 000000000..e4504812e --- /dev/null +++ b/inst/tinytest/_tinysnapshot/tinytheme_palette_function_qualitative.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +factor(1:9) +1 +2 +3 +4 +5 +6 +7 +8 +9 + + + + + + + +Index +1:9 + + + + + + + +2 +4 +6 +8 + + + + + +2 +4 +6 +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inst/tinytest/_tinysnapshot/tinytheme_palette_function_sequential.svg b/inst/tinytest/_tinysnapshot/tinytheme_palette_function_sequential.svg new file mode 100644 index 000000000..0984cb5e1 --- /dev/null +++ b/inst/tinytest/_tinysnapshot/tinytheme_palette_function_sequential.svg @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + 2 + 4 + 6 + 8 +- - +- - +- - +- - +1:9 + + + + + + + +Index +1:9 + + + + + + + +2 +4 +6 +8 + + + + + +2 +4 +6 +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inst/tinytest/test-tinytheme.R b/inst/tinytest/test-tinytheme.R index 9584c7727..e63f63e61 100644 --- a/inst/tinytest/test-tinytheme.R +++ b/inst/tinytest/test-tinytheme.R @@ -157,6 +157,29 @@ expect_snapshot_plot(f, label = "tinytheme_dynamic_clean_spineplot") tinytheme() +## palette functions (#593) + +pal = colorRampPalette(c("darkblue", "deeppink", "cornsilk")) + +f = function () { + tinytheme("clean", palette.sequential = pal, pch = 21) + tinyplot(1:9, by = 1:9, cex = 3, lwd = 3, bg = "by") +} +expect_snapshot_plot(f, label = "tinytheme_palette_function_sequential") + +f = function () { + tinytheme("clean", palette.qualitative = pal, pch = 21) + tinyplot(1:9, by = factor(1:9), cex = 3, lwd = 3, bg = "by") +} +expect_snapshot_plot(f, label = "tinytheme_palette_function_qualitative") + + +# +## reset + +tinytheme() + + # ## ephemeral theme @@ -187,3 +210,18 @@ f = function() { tinytheme() } expect_snapshot_plot(f, label = "tinytheme_dynmar_mar_override") + +## palette functions (#593) +pal = colorRampPalette(c("darkblue", "deeppink", "cornsilk")) + +f = function () { + tinyplot(1:9, by = 1:9, cex = 3, lwd = 3, bg = "by", + theme = list("clean", palette.sequential = pal, pch = 21)) +} +expect_snapshot_plot(f, label = "tinytheme_ephemeral_palette_function_sequential") + +f = function () { + tinyplot(1:9, by = factor(1:9), cex = 3, lwd = 3, bg = "by", + theme = list("clean", palette.qualitative = pal, pch = 21)) +} +expect_snapshot_plot(f, label = "tinytheme_ephemeral_palette_function_qualitative") From b1d571bc624efd39caaaff8d727b0e3df822dbd7 Mon Sep 17 00:00:00 2001 From: Grant McDermott Date: Sun, 31 May 2026 11:42:58 -0700 Subject: [PATCH 6/6] regenerate snapshots after merging in main --- ...ephemeral_palette_function_qualitative.svg | 80 +++++++++---------- ..._ephemeral_palette_function_sequential.svg | 80 +++++++++---------- ...tinytheme_palette_function_qualitative.svg | 80 +++++++++---------- .../tinytheme_palette_function_sequential.svg | 80 +++++++++---------- 4 files changed, 160 insertions(+), 160 deletions(-) diff --git a/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_qualitative.svg b/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_qualitative.svg index e4504812e..d634e8d2e 100644 --- a/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_qualitative.svg +++ b/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_qualitative.svg @@ -61,53 +61,53 @@ -Index +Index 1:9 - - - - - -2 -4 -6 -8 - - - - - -2 -4 -6 -8 - + + + + + +2 +4 +6 +8 + + + + + +2 +4 +6 +8 + - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_sequential.svg b/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_sequential.svg index 0984cb5e1..e70b506d2 100644 --- a/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_sequential.svg +++ b/inst/tinytest/_tinysnapshot/tinytheme_ephemeral_palette_function_sequential.svg @@ -43,53 +43,53 @@ -Index +Index 1:9 - - - - - -2 -4 -6 -8 - - - - - -2 -4 -6 -8 - + + + + + +2 +4 +6 +8 + + + + + +2 +4 +6 +8 + - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/inst/tinytest/_tinysnapshot/tinytheme_palette_function_qualitative.svg b/inst/tinytest/_tinysnapshot/tinytheme_palette_function_qualitative.svg index e4504812e..d634e8d2e 100644 --- a/inst/tinytest/_tinysnapshot/tinytheme_palette_function_qualitative.svg +++ b/inst/tinytest/_tinysnapshot/tinytheme_palette_function_qualitative.svg @@ -61,53 +61,53 @@ -Index +Index 1:9 - - - - - -2 -4 -6 -8 - - - - - -2 -4 -6 -8 - + + + + + +2 +4 +6 +8 + + + + + +2 +4 +6 +8 + - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/inst/tinytest/_tinysnapshot/tinytheme_palette_function_sequential.svg b/inst/tinytest/_tinysnapshot/tinytheme_palette_function_sequential.svg index 0984cb5e1..e70b506d2 100644 --- a/inst/tinytest/_tinysnapshot/tinytheme_palette_function_sequential.svg +++ b/inst/tinytest/_tinysnapshot/tinytheme_palette_function_sequential.svg @@ -43,53 +43,53 @@ -Index +Index 1:9 - - - - - -2 -4 -6 -8 - - - - - -2 -4 -6 -8 - + + + + + +2 +4 +6 +8 + + + + + +2 +4 +6 +8 + - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +