[R] color palette from red to blue passing white

hadley wickham h.wickham at gmail.com
Tue Dec 4 19:26:29 CET 2007

> Hmm,  I would have recommended
>   colorRampPalette(c('dark red','white','dark blue'),
>                    space = "Lab")
> where the 'space = "Lab"' part also makes sure that a
> "perceptually-based" space rather than RGB is used.
> I think the functions colorRamp() and (even more)
> colorRampPalette()  are very nice, part of "standard R" and
> still not known and used enough.

Well I use them in ggplot2 :)  Unfortunately I've noticed that space =
"Lab" is much slower than space = "RGB" which is why I don't use Lab
space as a default.  And it also ignores alpha values, which is a bit
of a pain.

> Note that they are based on 'convertColor()' and other color
> space functionality in R all of which deserve more usage
> in my oppinion and also in my own code ! ;-)

I find colour manipulation generally painful - all the really hard
stuff is there (i.e. conversion between colour spaces), but convenient
functions are lacking.   For example, I have this alpha function in

alpha <- function(colour, alpha) {
  col <- col2rgb(colour, TRUE) / 255
  col[4, ] <- rep(alpha, length(colour))

  new_col <- rgb(col[1,], col[2,], col[3,], col[4,])
  new_col[is.na(colour)] <- NA

which seems like a lot of work for a simple task.  The fact that
col2rgb and rgb aren't symmetric is frustrating, especially since one
outputs values between 0 and 255 and the other (by default) accepts
inputs between 0 and 1.

> Package 'vcd' (and others) use package 'colorspace',
> and I have wondered in the past if these color space computations
> should not be merged into to standard R (package 'grDevices').
> But that's really a topic for another thread, on R-devel, not R-help..

It would definitely be nice if all colour space manipulations were
merged into a single package, with a consistent interface.  I would
happily contribute to such a project, since I do a lot of colour
manipulation in ggplot.



More information about the R-help mailing list