See the help pages for color() and palette(), and perhaps the RColorBrewer package.
Splus lets you define colour palettes in its Gui, using a nice little notation where you specify something like "black 8 white 6 red" to get a 17-colour palette with 8 colours between balck and white and then 6 colours up to red (linearly interpolating RGB values). Here's a little R function to do something similar:
smoothColours <- function(...){ ### ### usage: smoothColours(colour,[n|colour],...) ### like smoothColours("white",10,"black") 12 colours, white to black ### args <- list(...) r <- g <- b <- NULL while(length(args)>0){ if(!is.character(args[[1]])){ stop("bad args") }
if(length(args)>1){ if(is.numeric(args[[2]])){ ## do interpolate: from <- col2rgb(args[[1]]) too <- col2rgb(args[[3]]) ## generate args[[2]] colours between specified colours: n <- args[[2]]+2 # add 2 for start and finish
## chop off last one since it will be added on the next iteration: r <- c(r,seq(from[1,],too[1,],length=n)) i <- length(r) r <- r[-i] g <- c(g,seq(from[2,],too[2,],length=n)) g <- g[-i] b <- c(b,seq(from[3,],too[3,],length=n)) b <- b[-i] ## cut colour and n from list and back we go args <- args[-(1:2)]
}else{ ## insert colour, chop off 1 cc <- col2rgb(args[[1]]) r <- c(r,cc[1,]) g <- c(g,cc[2,]) b <- c(b,cc[3,]) args <- args[-1] } }else{ ## insert colour, chop off 1 cc <- col2rgb(args[[1]]) r <- c(r,cc[1,]) g <- c(g,cc[2,]) b <- c(b,cc[3,]) args <- args[-1] } } rgb(r,g,b,max=255) }
You can then do something like:
image(matrix(runif(100),10,10),col=smoothColours("red",5,"green",6,"blue"))
You can use as many "colour",n,"colour" things as you like, as long as it starts and ends with a colour name. You can even do:
smoothColours("red","green",10,"white")
And you can use "#abcdef" notation too.
Of course, linearly interpolating in RGB might not be the right thing to do...
Baz
______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help