# FW: [R] Plotcorr: colour the ellipses to emphasize the differences

Duncan Murdoch murdoch at stats.uwo.ca
Sun Oct 17 22:02:08 CEST 2004

```On Sun, 17 Oct 2004 20:33:48 +0200, "Gorjanc Gregor"
<Gregor.Gorjanc at bfro.uni-lj.si> wrote:

>-----Original Message-----
>From: Duncan Murdoch [mailto:murdoch at stats.uwo.ca]

>> 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

```