I've had this a few times, so here goes: I'm making some plots which hold curves with estimates of a parameter given a tuning parameter.
Typically, I also have SDs for each estimated value, so I could show error bars around each of them.
However, I don't like error bars, and would prefer some smoothed version of it. This is in itself no problem (ie I know how to do this). However, my plot contains several of these similar curves, each one in its own color. So I would like to add the 'smoothed errorregion' to each curve in a color that matches the color of the curve itself. Of course, I would like to do this somewhat transparently, so I can still see the other curves through the 'error region'.
So, my question is: given a color (specified by either a number, a name or an rgb value --- note the first two pose an extra problem, but this is occurring rather often, as the basic plotting functions take these as valid color values), how can I find find the matching color that has the same rgb but a different (given) alpha level (transparency). I would like a function like:
makeTransparent<-function(someColor, alpha=100)
{
newColor<-someColor + alpha #I wish
return(newColor)
}
This should work for things like:
makeTransparent(2)
makeTransparent("red")
makeTransparent(rgb(0,0,1))
Edit I hate it when I miss something obvious, but @themel pointed me to it (thx again). Here's a full solution (note: works vectorized, so you can pass more than one color; only one alpha is supported at this time though):
#note: always pass alpha on the 0-255 scale
makeTransparent<-function(someColor, alpha=100)
{
newColor<-col2rgb(someColor)
apply(newColor, 2, function(curcoldata){rgb(red=curcoldata[1], green=curcoldata[2],
blue=curcoldata[3],alpha=alpha, maxColorValue=255)})
}
There is a function adjustcolor
in grDevices
package, that works like this in your case:
adjustcolor( "red", alpha.f = 0.2)