Open teunbrand opened 2 weeks ago
TODO: look into preserving current behaviour
The default colour/fill scales like scale_colour_discrete()
, scale_fill_continuous()
etc. now all produce a scale where palette = NULL
and thus theme palettes are invoked. For that reason, we wouldn't need to invoke a special scale here:
devtools::load_all("~/packages/ggplot2/")
#> ℹ Loading ggplot2
p <- ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class)) +
theme(
palette.colour.discrete = pal_brewer("qual")
)
p
The old way of specifying default scales through options()
is reasonably preserved.
Some areas where backwards compatibility does not hold completely:
type
argument.NULL
palette might throw an error.scale_colour_discrete()
scale no longer constructs a scale_colour_hue()
, so arguments like h
, c
and l
are not passed on.
If we're happy with the way the theme()
route for palettes work, we could consider deprecating the options()
route.options("ggplot2.discrete.colour" = scale_colour_viridis_d)
p
Created on 2024-06-19 with reprex v2.1.0
Now supports all vanilla non-position aesthetics.
Extension aesthetics can be added by using register_theme_elements()
, where fallback palettes can be set as part of the specifications.
devtools::load_all("~/packages/ggplot2")
#> ℹ Loading ggplot2
register_theme_elements(
palette.foobar.discrete = function(n) seq(0.1, 1, length.out = n),
element_tree = list(
palette.foobar.discrete = el_def(c("character", "numeric", "integer", "function"))
)
)
fallback_palette("foobar", discrete = TRUE)
#> function(n) seq(0.1, 1, length.out = n)
Created on 2024-06-21 with reprex v2.1.0
I'll bump this from POC to WIP.
This is a proof-of-concept PR for a part of #2239 and fix #4696.
It explores setting scale palettes from the theme. When a scale has a
NULL
palette, the palette will be retrieved from the theme. In the theme, palettes can be provided for different aesthetic/discreteness combinations. Currently, only aesthetics for which this is implemented arecolour
andfill
.Some demos of this mechanism:
Created on 2024-06-18 with reprex v2.1.0
The idea is that we'd have the default scales, e.g.
scale_colour_discrete()
,scale_colour_continuous()
etc. haveNULL
palettes so that this mechanism kicks in. I'd still have to figure out how to do this in a backwards compatible manner though.