给定颜色的透明等效物

我已经有了这几次,所以在这里:我正在做一些曲线,用给定的调整参数估计参数。

通常情况下,我也有每个估计值的SD,所以我可以在他们每个人周围显示错误栏。

但是,我不喜欢错误栏,并希望一些平滑的版本。 这本身没有问题(即我知道如何做到这一点)。 但是,我的情节包含几个这些相似的曲线,每个都有自己的颜色。 所以我想用与曲线本身颜色相匹配的颜色在每条曲线上添加“平滑的误差区域”。 当然,我想这样做有点透明,所以我仍然可以通过“错误区域”看到其他曲线。

所以,我的问题是:给定一个颜色(由一个数字,一个名称或一个rgb值指定) – 注意前两个提出了一个额外的问题,但这是经常发生的,因为基本的绘图function将其视为有效颜色值),我怎么能find匹配的颜色具有相同的rgb,但不同的(给定的)alpha级别(透明度)。 我想要一个像这样的function:

makeTransparent<-function(someColor, alpha=100) { newColor<-someColor + alpha #I wish return(newColor) } 

这应该适用于像这样的事情:

 makeTransparent(2) makeTransparent("red") makeTransparent(rgb(0,0,1)) 

编辑我讨厌它,当我错过了一些明显的东西,但@themel指出我(thx再次)。 这里有一个完整的解决scheme(注意:vector化的工作,所以你可以传递多种颜色,但目前只支持一个alpha):

 #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)}) } 

你有没有看过?rgb

用法:

rgb(红色,绿色,蓝色,alpha,名称= NULL,maxColorValue = 1)

也可以指定alpha透明度值(作为不透明度,所以'0'表示完全透明,'max'表示不透明度)。 如果未指定alpha,则会生成不透明的颜色。

alpha参数用于指定透明度。 col2rgb将以其他方式指定的R颜色分割为RGB,以便将它们馈送到rgb

grDevices包中有一个函数adjustcolor ,在你的情况下就像这样工作:

  adjustcolor( "red", alpha.f = 0.2) 

我认为在[0,1]指定alpha更为常见。 这个函数做到这一点,加上接受几种颜色作为参数:

 makeTransparent = function(..., alpha=0.5) { if(alpha<0 | alpha>1) stop("alpha must be between 0 and 1") alpha = floor(255*alpha) newColor = col2rgb(col=unlist(list(...)), alpha=FALSE) .makeTransparent = function(col, alpha) { rgb(red=col[1], green=col[2], blue=col[3], alpha=alpha, maxColorValue=255) } newColor = apply(newColor, 2, .makeTransparent, alpha=alpha) return(newColor) } 

而且,要testing:

 makeTransparent(2, 4) [1] "#FF00007F" "#0000FF7F" makeTransparent("red", "blue") [1] "#FF00007F" "#0000FF7F" makeTransparent(rgb(1,0,0), rgb(0,0,1)) [1] "#FF00007F" "#0000FF7F" makeTransparent("red", "blue", alpha=0.8) [1] "#FF0000CC" "#0000FFCC"