2013-12-18 47 views
6

ヒートマップを使用してデータを比較しようとしています。私はそれらのすべてのために同じになるように色のスケールを設定したい。たとえば、値が-0.5〜0.5のすべての尺度で、ヒートマップのカラースケールを設定

私はgplots redgreen(50)を使用しています。色強度は異なるセットの データに再スケーリングされます。

たとえば、 my r.matrixの範囲は-1から+1までです。私のr1.matrixの範囲は-0.2から+0.2です。 2本のヒートマップをプロットすることにより、同じカラースケールに入れた場合、私はr1.matrixの色が

hm <- heatmap(r.matrix, Colv = NA, col = redgreen(50)) 
hm1 <- heatmap(r1.matrix, Colv = NA, col = redgreen(50)) 

多くの調光器は、カラースケールは、データ範囲全体にまたがることが期待される同じredgreen(50)を持つので、 -1から+1までの範囲のデータと-2から+2までの範囲のデータについては、同じ赤または緑になります。データ範囲[-.2、.2]上の[-1,1]を横切るカラースパンを、データ範囲を調べたり、知ることなく、データの差異を視覚化できるようにする理由は、探索的なステップです。

答えて

4

コマンドredgreen(50)は、実際の値から独立しており、50色のベクトルを返します。この色ベクトルを使用して、その部分集合を抽出して、それを2番目の行列に適合させることができます。

例:マトリックスr1.matrix

set.seed(1) 
r.matrix <- matrix(runif(16, -1, 1), 4, 4) 
r1.matrix <- r.matrix/5 

値はr.matrixの値の五分の一です。

さて、色ベクトルは、以下の方法で作成することができます。

library(gplots) 

rg <- redgreen(50)  # the original color vector 

# range of values in first matrix around median 
r1 <- range(r.matrix) - median(r.matrix) 
# range of values in second matrix around median 
r2 <- range(r1.matrix) - median(r1.matrix) 
# relative distances to median of second compared to first matrix 
prop <- r1/r2 

# center of colcor vector 
cent <- length(rg)/2 + 0.5 

# calculate indices of shorter color vector for the second matrix 
ind <- cent/prop 
idx <- round(cent - c(1, -1) * ind) 

# new color vector 
rg_new <- rg[Reduce(seq, idx)] 

は、ヒートマップを着色するこれらのベクターを使用してください:

enter image description here

heatmap(r1.matrix, Colv = NA, col = rg_new) 

enter image description here

2番目のヒートマップの色の範囲は、1番目のヒートマップの範囲よりも小さくなります。

+0

ありがとうSven Hohenstein - 色のスケールはデータ範囲にまたがるので、同じ赤緑色(50)の場合、-1から+1の範囲のデータと、-.2から+2。データ範囲[-.2、.2]の[-1,1]を横切るカラースパンをデータの違いを視覚化できるようにする理由は、どのくらいのデータの違いが分かっていないのですか? – user2783615

+0

@ user2783615私は答えを更新しました。さて、マトリックス2の範囲を事前に知らなくても、色の第2のベクトルの作成が可能です(しかし、それはより小さくなければなりません)。 –

+0

ありがとうSven!あなたのものは良い解決策です。私はすべてのポストクラスター化マトリックスを組み合わせて、空の列を追加した後、それらを一緒にプロットして、同じスケールに置くようにしました。とにかく、それは良い視覚資料を与えました。 – user2783615

関連する問題