透明等效于给定颜色

时间:2011-11-08 08:26:08

标签: r colors alpha-transparency

我已经有过几次,所以这里是:我做了一些情节,其中包含一个参数估计值给出调整参数的曲线。

通常情况下,每个估算值都有SD,所以我可以在每个估算值周围显示误差条。

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

所以,我的问题是:给定一种颜色(由数字,名称或rgb值指定---注意前两个会带来额外的问题,但这种情况经常发生,因为基本的绘图功能需要这些作为有效的颜色值),我怎样才能找到具有相同rgb但不同(给定)alpha级别(透明度)的匹配颜色。我想要一个像:

这样的功能
makeTransparent<-function(someColor, alpha=100)
{
  newColor<-someColor + alpha #I wish
  return(newColor)
}

这适用于以下内容:

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

编辑当我想念一些明显的东西时,我讨厌它,但@themel指出了我(再次)。这是一个完整的解决方案(注意:工作矢量化,因此您可以传递多种颜色;但此时仅支持一个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)})
}

5 个答案:

答案 0 :(得分:61)

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

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

答案 1 :(得分:46)

你看过?rgb了吗?

  

用法:

     

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

     

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

alpha参数用于指定透明度。 col2rgb将以其他方式指定的R颜色拆分为RGB,以便将它们提供给rgb

答案 2 :(得分:5)

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

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)

}

并且,测试:

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"

答案 3 :(得分:3)

转换valuable comment以回答:

使用alpha from package scales-第一个参数是颜色,第二个字母(0-1范围内)。

或编写公开的功能:

makeTransparent <- function(someColor, alpha=100) scales::alpha(someColor, alpha/100)

答案 4 :(得分:2)

像这样轻松转换十六进制颜色代码

DetailPage

要确认它是否有效:

adjustcolor("#F8766D", alpha.f = 0.2)
[1] "#F8766D33"

enter image description here