Open davidhodge931 opened 2 months ago
I've seen some SO posts around this, and I think having the option to do this is probably a good idea. I don't think we should make it a default for backward compatibility reasons though.
OK this is more nuanced than I originally thought. Essentially:
scale_colour_binned()
plot is a discrete palette slapped onto a binned scale, where we increment the requested colour every bin.scale_colour_stepsn()
is a continuous scale slapped onto a binned scale where the bin midpoints are translated to colours. The difference becomes much clearer when you have enevenly distributed breaks:
library(ggplot2)
library(patchwork)
p <- ggplot(mpg, aes(displ, hwy, colour = cty)) +
geom_point()
breaks <- c(8, 10, 12, 16, 20, 24)
p1 <- p +
scale_colour_binned(type = "viridis", breaks = breaks) +
labs(title = "binned")
p2 <- p +
scale_colour_stepsn(colours = viridis::viridis(9), breaks = breaks) +
labs(title = "stepsn")
p1 + p2
Created on 2024-09-16 with reprex v2.1.1
In order to take the 'full range' of the continuous scale, one shouldn't rescale the values using the limits, but the most extreme breaks. Unfortunately, the plumbing isn't setup to deal with this, so it is harder to do than anticipated.
Ah, I see - thanks for the explanation.
I think it is a valid and common use-case to want to colour bins of your own custom colours and apply that colour palette in a discrete way like scale_colour_binned
does.
Feel free to close
The
scale_*_steps*
functions currently do not apply the full range of colours to a plot.See example below of
scale_colour_binned
, which applies the full range of the viridis colour palette compared to adding viridis colours toscale_colour_stepsn
which does not.Generally, you need as big a range of colour as possible when colouring a numeric variable.
Could the
scale_*_steps*
functions apply the full range of colour by default to the plot?Created on 2024-09-01 with reprex v2.1.1