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)})
}
I think is more common to specify
alpha
in[0,1]
. This function do that, plus accept several colors as arguments:And, to test:
Have you had a look at
?rgb
?The
alpha
parameter is for specifying transparency.col2rgb
splits R colors specified in other ways into RGB so you can feed them torgb
.There is a function
adjustcolor
ingrDevices
package, that works like this in your case:Converting valuable comment to answer:
Use
alpha
from packagescales
- first argument is colour, second alpha (in 0-1 range).Or write function overt it: