2011-11-08 83 views
41

我已經有過幾次了,所以在這裏:我製作了一些曲線圖,其中給出了調整參數的參數估計值。給定顏色的透明等效物

通常情況下,我也有每個估計值的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向我指出它(THX再次)。這裏有一個完整的解決方案(注:作品矢量,所以你可以通過不止一種顏色,只有一個字母在這個時候支持雖然):

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

'ggplot2 :: alpha()'也許? – baptiste

+2

'鱗片'也有'alpha',也許它們是相關的。其中之一是秤有一個非常漂亮的界面。它的輸入非常靈活。我認爲可以用plot(data,col = alpha(colors,0.5))代替'plot(data,col = colors)'形式的任何表達式以獲得50%的透明度。即使「顏色」僅僅是一個從標準調色板中選擇顏色的整數矢量,它也可以工作。 –

+0

有點相關(根據谷歌反正),我發現它非常有用:https://gist.github.com/mages/5339689/raw/576263b8f0550125b61f4ddba127f5aa00fa2014/add.alpha.R – PatrickT

回答

36

你有沒有看看?rgb

用法:

RGB(紅,綠,藍,α,名字= NULL,maxColorValue = 1)

阿爾法透明度值也可以被指定(作爲不透明度, 所以' 0「表示完全透明,」最大「表示不透明)。如果未指定 alpha',則會生成不透明的顏色。

alpha參數用於指定透明度。 col2rgb將以其他方式指定的R顏色分割爲RGB,以便將它們饋送到rgb

+0

'col2rgb'是我錯過的東西 - 必須仔細閱讀:-(另外我不希望這個功能可以使用RGB格式的顏色,我將編輯我自己的問題以包含基於你的完整答案 –

+0

不知道關於'col2rgb' ,這是非常有用的! –

+1

在我的情況下,它也有必要轉置col2rgb()返回值並傳遞maxColorValue參數進行標準化:rgb(t(col2rgb(c(「red」,「green」))),alpha = 100 ,maxColorValue = 255) –

3

我認爲在[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) 

} 

而且,爲了測試:

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" 
45

有一個在grDevices包的功能adjustcolor,你的情況是這樣的:

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

非常簡單易用:對我很好,謝謝。 – jcfaria