web-dev-qa-db-ja.com

与えられた色の透明な同等物

私はこれを数回行ったので、ここに行きます:チューニングパラメータが与えられたパラメータの推定値で曲線を保持するいくつかのプロットを作成しています。

通常、推定値ごとにSDもあるため、各推定値の周りにエラーバーを表示できます。

しかし、私はエラーバーが好きではありません、そしてそれのいくらかの滑らかなバージョンを好むでしょう。これ自体は問題ありません(つまり、これを行う方法を知っています)。ただし、私のプロットには、これらの類似した曲線がいくつか含まれており、それぞれが独自の色になっています。そこで、曲線自体の色と一致する色で、各曲線に「平滑化された誤差領域」を追加したいと思います。もちろん、これをいくぶん透過的に行いたいので、「エラー領域」を通して他の曲線を見ることができます。

だから、私の質問は次のとおりです:色(数字、名前またはrgb値のいずれかで指定されます)---最初の2つは余分な問題を提起することに注意してください色値)、同じrgbが異なる(指定された)アルファレベル(透明度)を持つ一致する色を見つけるにはどうすればよいですか?次のような関数が欲しいです:

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

これは次のようなもので動作するはずです:

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

編集明らかな何かを見逃したときは嫌いですが、@ themelはそれを指摘しました(再び)。完全なソリューションを次に示します(注:ベクトル化されているため、複数の色を渡すことができますが、現時点では1つのアルファのみがサポートされています)。

#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)})
}
50
Nick Sabbe

?rgbをご覧になりましたか?

使用法:

rgb(赤、緑、青、アルファ、名前= NULL、maxColorValue = 1)

アルファ透明度の値も指定できます(不透明度として、「0」は完全に透明、「最大」は不透明を意味します)。アルファが指定されていない場合、不透明な色が生成されます。

alphaパラメーターは、透明度を指定するためのものです。 col2rgbは、他の方法で指定されたR色をRGBに分割し、rgbにフィードできるようにします。

47
themel

adjustcolorパッケージにはgrDevices関数があり、これはあなたのケースで次のように機能します。

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

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

貴重なコメント を回答に変換:

パッケージalphaの-​​ scales を使用-最初の引数は色、2番目のアルファ(0-1の範囲)。

または、関数を明示的に記述します。

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