[Rd] Colour Schemes

Deepayan Sarkar deepayan.sarkar at gmail.com
Thu May 21 21:45:30 CEST 2009

On Thu, May 21, 2009 at 10:53 AM, Barry Rowlingson
<b.rowlingson at lancaster.ac.uk> wrote:
> On Thu, May 21, 2009 at 5:29 PM, Deepayan Sarkar
> <deepayan.sarkar at gmail.com> wrote:
> [oops I didnt reply-to-all]
>> But you could specify an explicit 'at' vector specifying the color
>> breakpoints: effectively, you want at = do.breaks(zlim, 5).
>> lattice does have a function called 'level.colors' that factors out
>> the color assignment computation.
>  Yes, but these things are all at the wrong conceptual level. What you
> are constructing here is a function that maps value to colour, but
> keeping it as breaks and cut values and colours instead of
> representing it as a function. Wouldn't it be nicer to build a real
> function object and have that to pass around?

If that tickles your fancy, it's not a big stretch to get to


continuousColours <- function(at, col.regions, ...)
    function(x) {
        level.colors(x, at = at, col.regions = col.regions, ...)

## caveat: level.colors requires 'at' values to be unique, hence the 999,1001
scheme2 <-
    continuousColours(at = list(-1000, 0, 400, 999, 1001, 10000),
                      col.regions = c("blue", "sandYellow",
"grassGreen", "rockBrown", "white"))

## you could do something similar with your list format too, of course.


which gives

> scheme2(c(-500, -200, 200, 2000))
[1] "blue"       "blue"       "sandYellow" "white"

But generally speaking, I wouldn't presume to dictate that any given
approach is universally "nicer" than another; I don't expect others to
have the same tastes as me, and conversely, don't expect to be told
what my tastes should be (if I did, I would probably be using Excel).


More information about the R-devel mailing list