2013-02-21 3 views
6

Rでは、colorRampPaletteなどのカラーランプを簡単に生成できます。次の例では、青から赤までの5色のシーケンスが生成されます。Rから数値を色にマッピングするにはどうすればよいですか?

> mypal <- colorRampPalette(c("blue", "red"))(5) 
> mypal 
[1] "#0000FF" "#3F00BF" "#7F007F" "#BF003F" "#FF0000" 

このパレットにはどのように番号のベクトルを簡単にマップできますか?私はこのように、0〜10の数字のベクトルを持っている、と言う:

x <- c(1, 9, 8.5, 3, 3.4, 6.2) 

私は通常、私はmap2color(mypal, x)を実行したとき、私は

#0000FF, #FF0000, #FF0000, #3F00BF, #3F00BF, #BF003F 

を得るように、map2colorを言う、機能をしたいと思います

mypalette[ findInterval(x, seq(0, 10, length.out= 6), rightmost.closed= T) ] 

などがありますが、数値ベクトルのカラースケールを自動的に生成する優れたソリューションがあります。

+0

HCLの色空間で輝度が変化する場合がありますが、 '?hcl' – James

答えて

4

マイcolourschemeパッケージがあることない試すことができます。その主な目的は、数値(だけでなく、整数色番号をマッピング関数を作成することです

https://r-forge.r-project.org/projects/colourscheme/

)を色に変換します。あなたがそれをインストールしたら、ビネットは最高のドキュメントです。

+0

おもしろいですね!なぜあなたはそれをCRANに提出しなかったのですか? (私はinstall.packagesでインストールすることはできず、svnを使用しなければならなかった) – January

+0

これは非常に速いアドホックハックであり、ドキュメントはちょっとゴミで、勢いと使い方を集めることを期待していました。やったことはありません... – Spacedman

+0

CRANではないので、ええ、見つからなかった: – January

4

あなたはR-フォージの

> colorRampPalette(c('blue', 'red'))(length(x))[rank(x)] 
[1] "#0000FF" "#FF0000" "#CC0032" "#3300CC" "#660099" "#990065" 
+0

を参照してください。これはOPの結果とは異なりますか? – agstudy

+2

いいえ、これはうまくいかないでしょう。近い数字は非常に似た色でなければなりません。 c(1、2、3、200)を取る。最初の3つの数字はすべてカラースカラの始まりに近くなければならず、ランクを使用すると3は既に青色になります。 – January

+0

これは1月の問題を解決できないかもしれませんが、1,2,3および200の場合にすべての数字を区別したい場合、異なる問題を解決します。 –

3

はここmap2color機能です:

map2color<-function(x,pal,limits=NULL){ 
    if(is.null(limits)) limits=range(x) 
    pal[findInterval(x,seq(limits[1],limits[2],length.out=length(pal)+1), all.inside=TRUE)] 
} 


map2color(0:11,rainbow(200),limits=c(1,10)) 
[1] "#FF0000FF" "#FF0000FF" "#FFA800FF" "#ADFF00FF" "#05FF00FF" "#00FFA3FF" 
[7] "#00ABFFFF" "#0003FFFF" "#A600FFFF" "#FF00B0FF" "#FF0008FF" "#FF0008FF" 
map2color(0:11,rainbow(200)) 
[1] "#FF0000FF" "#FF8A00FF" "#EBFF00FF" "#61FF00FF" "#00FF29FF" "#00FFB3FF" 
[7] "#00BAFFFF" "#0030FFFF" "#5900FFFF" "#E300FFFF" "#FF0091FF" "#FF0008FF" 


mypal <- colorRampPalette(c("blue", "red"))(5) 
x <- c(1, 9, 8.5, 3, 3.4, 6.2) 
map2color(x,mypal) 
"#0000FF" "#FF0000" "#FF0000" "#3F00BF" "#3F00BF" "#BF003F" 

私はデータの異なるサンプル間で一致するであろうcolorrampを作成するには、このようなものを必要なので、私はXLIMパラメータを追加しました。あなたの質問のfindInterval関数を思い出してくれてありがとう。

2

私は考えることができる最も簡単な事はcutを使用して変数xを離散化して、インデックスにheat.colorsまたはcm.colors

f <- function(x,n=10){ 
    heat.colors(n)[cut(x,n)] 
} 

のようなカラーパレットを生じた要因を使用しているパレットの詳細について?heat.colorsを参照してください。

この関数は、nに比例する様々な粒度のxに対応する色ベクトルです。

関連する問題