On Sun, 17 Oct 2004 20:33:48 +0200, "Gorjanc Gregor" <[EMAIL PROTECTED]> wrote:
>-----Original Message----- >From: Duncan Murdoch [mailto:[EMAIL PROTECTED] >> I think it would be useful to have a general function that did what >> cm.colors does but for other paths through colour space, but I've >> never written one (or done a thorough search to see if someone else >> has.) > >I agree with this! I've now written a little one: path.colors <- function(n, path=c('cyan', 'white', 'magenta'), interp=c('rgb','hsv')) { interp <- match.arg(interp) path <- col2rgb(path) nin <- ncol(path) if (interp == 'hsv') { path <- rgb2hsv(path) # Modify the interpolation so that the circular nature of hue is used for (i in 2:nin) path[1,i] <- path[1,i] + round(path[1,i-1]-path[1,i]) result <- apply(path, 1, function(x) approx(seq(0, 1, len=nin), x, seq(0, 1, len=n))$y) return(hsv(result[,1] %% 1, result[,2], result[,3])) } else { result <- apply(path, 1, function(x) approx(seq(0, 1, len=nin), x, seq(0, 1, len=n))$y) return(rgb(result[,1]/255, result[,2]/255, result[,3]/255)) } } I'm not entirely happy with it, but you're welcome to play with it. The general idea is that you give a sequence of colors in either rgb or hsv space, and it expands that sequence to a longer string of interpolated colors. For example, the default path.colors(n, path=c("cyan", "white", "magenta"), interp="rgb") is fairly close to cm.colors(n) (but more saturated), and path.colors(n, c("red","green", "blue","red"), interp="hsv") is like rainbow(n-1) (but it repeats red at the end). Duncan Murdoch ______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html