Dear Atte Tenkanen,

Re:
> Hi,
> 
> I have tried to find a way to find opposite or complementary colors in R.
> 
> I would like to form a color circle with R like this one: 
> http://nobetty.net/dandls/colorwheel/complementary_colors.jpg
> 
> If you just make a basic color wheel in R, the colors do not form 
> complementary color circle:
> 
> palette(rainbow(24))
> Colors=palette()
> pie(rep(1, 24), col = Colors)
> 
> There is a package ”colortools” where you can find function opposite(), but 
> it doesn’t work as is said. I tried
> 
> library(colortools)
> opposite("violet") and got green instead of yellow and
> 
> opposite("blue") and got yellow instead of orange.
> 
> Do you know any solutions?
> 
> Atte Tenkanen


Actually, yellow and blue are complementary colours, but red and green aren't. 

The human visual system has three types of cones: red-sensitive, 
green-sensitive and blue-sensitive.
(the labels are approximate, e.g. red-sensitive cones have their optimum 
sensitivity at a wavelength we might call orange, but for understanding 
colours, R-G-B is the useful standard designation).
A certain combination of these three together, such as in sunlight, is seen as 
white. In the digital domain, the three "colour channels" of an image are 
usually scaled to 8-bit numbers, i.e. from zero up to and including 255. So, 
all three channels 255 makes white.

Leaving one of the three colors out yields yellow (no blue), magenta (no green) 
and cyan (no red). The pairs yellow-blue, magenta-green and cyan-red  are truly 
complementary colours.

Colours are the result of the wavelength of the light, so one would expect 
colours to lie on a linear scale, from about 700 nm (red), through 550 (green) 
to about 440 nm (blue).

There is a complication, however: the photosensitive pigment of our red cones 
has a second action peak past that of the blue cones, so past pure blue we see 
a sort of reddish blue, in other words violet or purple. Therefore, the colours 
can be plotted in a circle, where violet and purple fill the gap between blue 
and red.

Using a combination of the three ground colors R, G and B, any desired colour 
shade can be composed. Orange, for example, consists of (approximately) all red 
and half green. 

- - - - - - - - -

R has ample possibilities to compose colours or colour palettes, with which one 
can create (almost continuous) gradients or stepwise colour patches.
Examples are col2rgb():

>col2rgb("orange")
      [,1]
red    255
green  165
blue     0

>col2rgb("violet")
      [,1]
red    238
green  130
blue   238

Cindy Brewer wrote a fine set of colour functions, adapted to R by Erich 
Neuwirth. See package "RColorBrewer".

And much can be done with the standard R distribution:
 
The following code plots a some colours in a circle, with the complementary 
colours at opposite sides (so crudely what you're after):


# define colour triplets
reds =   c( 255, 255,  255,    0,    0,    0,    0,  128)
greens = c(   0, 127,  255,  255,  255,  127,    0,    0)
blues=   c(   0,   0,    0,    0,  255,  255,  255,  255)
n = length(reds)
#  compute circle to plot in
stp = 2*pi/n
th = seq(0,2*pi-stp, length.out=n)
x = cos(th); y=sin(th)
#  plot (on a Mac, for other OSses call the appropriate grahics window
quartz(w=5, h=5)
par(xpd=NA)
plot(x,y,pch=15, cex=8, col=rgb(reds, greens, blues, maxColorValue = 255), 
asp=1, axes=FALSE, xlab='', ylab='')
points(x,y,pch=0, cex=8, col="black")
# arrows connect the complementary colours
arrows(0,0, 0.7*x, 0.7*y, length = 0.25, col = "grey")

Hope this helps;
Best wishes,


Frank
------

Franklin Bretschneider
Dept of Biology
Utrecht University
brets...@xs4all.nl

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to