59

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

通常、各推定値の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は私にそれを指摘しました(再びthx)。完全な解決策は次のとおりです(注:ベクトル化されているため、複数の色を渡すことができます。ただし、現時点では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)})
}
4

5 に答える 5

82

パッケージには、次のように機能adjustcolorする関数があります。grDevices

    adjustcolor( "red", alpha.f = 0.2)
于 2015-06-19T14:10:09.393 に答える
52

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

使用法:

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

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

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

于 2011-11-08T08:39:55.907 に答える
7

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"
于 2013-12-27T06:37:58.183 に答える
5

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

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

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

makeTransparent <- function(someColor, alpha=100) scales::alpha(someColor, alpha/100)
于 2018-06-26T11:44:19.157 に答える
5

このように16進数のカラーコードを簡単に変換できます

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

それが機能したことを確認するには:

library(scales)
show_col(c("#F8766D", "#F8766D33"))

ここに画像の説明を入力してください

于 2020-04-13T17:21:37.043 に答える