透明等效于给定颜色

Nic*_*bbe 51 r colors alpha-transparency

我已经有过几次了,所以这里是:我正在制作一些图表,其中包含一个参数估计值的曲线给定一个调整参数.

通常,我也为每个估计值都有SD,所以我可以在每个估计值周围显示误差条.

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

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

makeTransparent<-function(someColor, alpha=100)
{
  newColor<-someColor + alpha #I wish
  return(newColor)
}
Run Code Online (Sandbox Code Playgroud)

这适用于以下事项:

makeTransparent(2)
makeTransparent("red")
makeTransparent(rgb(0,0,1))
Run Code Online (Sandbox Code Playgroud)

编辑当我想念一些明显的东西时,我讨厌它,但@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)})
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*hko 64

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

    adjustcolor( "red", alpha.f = 0.2)
Run Code Online (Sandbox Code Playgroud)

  • 非常简单易用:对我很好,谢谢. (2认同)

the*_*mel 47

你看过了?rgb吗?

用法:

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

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

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

  • 在我的情况下,还需要转置col2rgb()返回值并传递maxColorValue参数进行规范化:rgb(t(col2rgb(c("red","green"))),alpha = 100,maxColorValue = 255) (3认同)

use*_*745 6

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

adjustcolor("#F8766D", alpha.f = 0.2)
[1] "#F8766D33"
Run Code Online (Sandbox Code Playgroud)

要确认它有效:

library(scales)
show_col(c("#F8766D", "#F8766D33"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Ric*_*mos 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)

}
Run Code Online (Sandbox Code Playgroud)

并且,测试:

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"
Run Code Online (Sandbox Code Playgroud)


Mar*_*rek 5

有价值的评论转换为答案:

alpha从包中scales使用- 第一个参数是颜色,第二个 alpha(在 0-1 范围内)。

或者写函数公开它:

makeTransparent <- function(someColor, alpha=100) scales::alpha(someColor, alpha/100)
Run Code Online (Sandbox Code Playgroud)