<[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
>I want to get a lighter shade of a color...I have a lot of colored objects
>and
> want each one printed as a foreground against a slightly lighter
> background.
>
> I thought I could try something like changing the alpha channel by first
> converting it to rgb.
I'm not sure what you want to do with the alpha channel - it's sometimes
used for transparency, especially on Macs, but is not used much on PCs
(AFAIK).
Let's say you want different shades of gold:
> colors()[142]
[1] "gold"
Instead of RGB color space perhaps you should consider HSV
(Hue-Saturation-Value) color space.
Let's convert "gold" to rgb to hsv:
> col2rgb( colors()[142] )
[,1]
red 255
green 215
blue 0
> rgb2hsv( col2rgb( colors()[142] ) )
[,1]
h 0.1405229
s 1.0000000
v 1.0000000
The "hue" (h) is the color ranging from 0 to 1 around a color circle (with
red= 0 or 1). Find h = 0.140 ("gold") in this color circle:
hue <- seq(0.0, 1.0, by=1/40)
pie(rep(1,40),
labels=formatC(hue, digits=3, format="f"), cex=0.75,
col=hsv(hue, 1.0, 1.0),
radius=1.0,
main="HSV (S=1, V=1)" )
Hues range from 0.0 to 1.0.
A color is saturated (s=1) when it is "far" from a shade of gray (ranging
from black to white). Grays are unsaturated (no color) colors with s = 0.
Saturation ranges from 0.0 to 1.0.
The value (v) is the brightness of the color. Low values appear quite dark
but still have color. v=1 is as bright as possible. Values range from 0.0
to 1.0.
You can get different "shades" of the same color by varying changing the
saturation and value for a given hue. The hsv function returns the RGB
color in hex form.
Consider:
> hsv(0.1405, 1, 1)
[1] "#FFD700"
Hex FF = decimal 255 = red
Hex D7 = decimal 215 = green
Hex 00 = decimal 0 = blue
Let's vary Saturation from 0.0 to 1.0 and Value from 0.0 to 1.0 in this
plot:
MakeHSVRectangle <- function(saturation, value)
{
GoldHue <- 0.140
color <- hsv(GoldHue, saturation, value)
rect(100*saturation, 100*value, 100*saturation+4, 100*value+4, col=color)
}
plot(0:110,0:110, type="n",
xlab="Saturation[%]", ylab="Value[%]",
main="Shades of Gold, H=0.140")
outer(seq(0.0, 1.0, 0.05), seq(0.0, 1.0, 0.05), MakeHSVRectangle)
With Value = 0, all colors are "black". With Saturation=0, the only
"colors" along the y axis are the shades of gray. The original "gold"
rectangle is at the upper right.
So, given a starting color, you have a number of "shades" (various
saturations and values) with the same color hue.
I hope this helps.
efg
Earl F. Glynn
Scientific Programmer
Stowers Institute for Medical Research
______________________________________________
[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
and provide commented, minimal, self-contained, reproducible code.