web-dev-qa-db-ja.com

Rでheatmap.2の色の範囲を変更するには?

Gplotを使用して、治療グループと対のコントロールのlog2倍の変化を示すヒートマップを作成しています。次のコードで:

 heatmap.2(as.matrix(SeqCountTable), col=redgreen(75), 
           density.info="none", trace="none", dendrogram=c("row"), 
            symm=F,symkey=T,symbreaks=T, scale="none") 

すべての生物学者のお気に入りである赤黒緑の配色で、実際の倍率変化値(つまり、非行Zスコア)を含むヒートマップを出力します!

http://i.stack.imgur.com/uhFbP.jpg

Log2倍の変化の実際の範囲は-3/+ 7であり、多くの値は-2/-1および+ 1/+ 2の範囲にあり、それぞれ暗い赤/緑で表示されます。これにより、ヒートマップ全体が非常に暗くなり、解釈が非常に困難になります。

  • 色のグラデーションをゆがめて線形性を低くする方法はありますか?つまり、黒から非常に明るいまでの勾配がより狭い範囲で発生するようになりますか?
  • そして/または、色範囲を非対称に変更します。つまり、現在のスケールの-7/+ 7ではなく、データのように-3/+ 7から実行しますが、黒はまだゼロを中心にしていますか?
14
Lippy

Symkey引数をFALSEに変更するだけで、色範囲が非対称になる

symm=F,symkey=F,symbreaks=T, scale="none"

Breaks引数を使用してcolorRampPaletteで色の問題を解決し、各色の範囲を指定します。

colors = c(seq(-3,-2,length=100),seq(-2,0.5,length=100),seq(0.5,6,length=100))

my_palette <- colorRampPalette(c("red", "black", "green"))(n = 299)

合わせて

heatmap.2(as.matrix(SeqCountTable), col=my_palette, 
    breaks=colors, density.info="none", trace="none", 
        dendrogram=c("row"), symm=F,symkey=F,symbreaks=T, scale="none")
14
Lippy

RColorBrewerパッケージを使用して、独自のカラーパレットを作成してみてください。

_my_palette <- colorRampPalette(c("green", "black", "red"))(n = 1000)
_

そして、これがどのように見えるかを見てください。しかし、あなたが本当に「真ん中」に黒を維持したい場合、スケーリングだけが役立つと思います。 redgreen()の代わりに、単に_my_palette_を使用できます。

RColorBrewer package をチェックアウトすることをお勧めします。かなり素敵な組み込みパレットがあり、インタラクティブな colorbrewerのウェブサイト をご覧ください。

13
user2489252

heatmap.2を使用していない人のための別のオプションがあります(aheatmapは良いです!)

入力行列の最小値から最大値までの100個の値のシーケンシャルベクトルを作成し、その中で0に最も近い値を見つけ、目的の中間点との間で2つの色のベクトルを作成し、それらを組み合わせて使用​​します。

breaks <- seq(from=min(range(inputMatrix)), to=max(range(inputMatrix)), length.out=100)
midpoint <- which.min(abs(breaks - 0))
rampCol1 <- colorRampPalette(c("forestgreen", "darkgreen", "black"))(midpoint)
rampCol2 <- colorRampPalette(c("black", "darkred", "red"))(100-(midpoint+1))
rampCols <- c(rampCol1,rampCol2)
0
bruce.moran

symbreaks = FALSEを設定する必要があると思います。これにより、非対称のカラースケールが可能になります。

0
Whsky Steve