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)
the*_*mel 47
你看过了?rgb
吗?
用法:
rgb(红色,绿色,蓝色,alpha,名称= NULL,maxColorValue = 1)
也可以指定Alpha透明度值(作为不透明度,因此'0'表示完全透明,'max'表示不透明).如果未指定alpha',则会生成不透明的颜色.
该alpha
参数用于指定透明度. col2rgb
将以其他方式指定的R颜色分割为RGB,以便将它们提供给它们rgb
.
像这样轻松转换十六进制颜色代码
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)
我认为这是比较常见的,指定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)
将有价值的评论转换为答案:
alpha
从包中scales
使用- 第一个参数是颜色,第二个 alpha(在 0-1 范围内)。
或者写函数公开它:
makeTransparent <- function(someColor, alpha=100) scales::alpha(someColor, alpha/100)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
65314 次 |
最近记录: |