2016-03-29 47 views
1

Rでいくつかのヒートマップを作成していますが、グラフ全体で色のスケールを一定に保つことに問題があります。プロット/ヒートマップの色間の色合いR

色がグラフ内で拡大縮小されていることがわかりました。グラフ間で色を一致させる方法はありますか?つまりしたがって、0.4と0.5の値の間の色の差は常に同じですか?

コード例:

set.seed(123) 

d1 = matrix(rnorm(9, mean = 0.2, sd = 0.1), ncol = 3) 
d2 = matrix(rnorm(9, mean = 0.8, sd = 0.1), ncol = 3) 

mat = list(d1, d2) 

for(m in mat) 
    heatmap(m, Rowv = NA ,Colv = NA) 

あなたは、セル(2,3)は、最初のグラフは、〜0.8であるにもかかわらず、第二に(1,3)セルに類似していることを例に注意しますあなたはベースのグラフィックスを使用していないに開放している場合

+0

ヒートマップコマンド(およびRの他のRヒートマップパッケージ)では、使用できる 'breaks'と' col'引数があります。 –

答えて

4

異なるがここでは、ggplot2でそれを行う方法です:

library(reshape2) 
library(ggplot2) 

# Set common limits for color scale 
limits = range(unlist(mat)) 

ここでは、2つのseparaためのコードです。テグラフ。各グラフのコードの最後の行は、それらが色を設定する同じz制限を使用することを保証する。

ggplot(melt(mat[[1]]), aes(Var1, Var2, fill=value)) + 
    geom_tile() + 
    scale_fill_continuous(limits=limits) 

ggplot(melt(mat[[2]]), aes(Var1, Var2, fill=value)) + 
    geom_tile() + 
    scale_fill_continuous(limits=limits) 

enter image description here

別のオプションが自動的に保証面取りを使用して単一のグラフに両方のヒートマップをプロットすることです両方のグラフは、同じ色のスケールである:私が使用した

ggplot(melt(mat), aes(Var1, Var2, fill=value)) + 
    geom_tile() + 
    facet_grid(. ~ L1) 

enter image description here

ここではデフォルトの色を使用していますが、いずれの方法でも色のスケールを任意の値に設定できます。たとえば、次のように

ggplot(melt(mat), aes(Var1, Var2, fill=value)) + 
    geom_tile() + 
    facet_grid(. ~ L1) + 
    scale_fill_gradient(low="red", high="green") 

enter image description here

3

それはheatmapの出力を一致させるためにいくつかの余分な書式設定が必要になりますけれどもあなたは、(heatmapimageを使用しています)直接image機能を使用することができます。 zlimを使用して色の範囲を設定できます。 Zの有限の値の範囲をデフォルト色をプロットする必要のある

最小値と最大Z値 :?imageページから引用。指定された色のそれぞれは、この範囲の等間隔の間隔を塗るために使用されます。間隔の中点が範囲をカバーするので、範囲外の値は となります。 別のあるimagebreaks引数を使用して

for(m in mat) { 
    labCol = dim(m)[2] 
    labRow = dim(m)[1] 
    image(seq_len(labCol), seq_len(labRow), m, zlim = c(minz, maxz), 
    col = heat.colors(20), axes = FALSE, xlab = "", ylab = "", 
    xlim = 0.5 + c(0, labCol), ylim = 0.5 + c(0, labRow)) 
    axis(1, 1L:labCol, labels = seq_len(labCol), las = 2, line = -0.5, tick = 0) 
    axis(4, 1L:labRow, labels = seq_len(labRow), las = 2, line = -0.5, tick = 0) 
} 

enter image description here

# define zlim min and max for all the plots 
minz = Reduce(min, mat) 
maxz = Reduce(max, mat) 

for(m in mat) { 
    image(m, zlim = c(minz, maxz), col = heat.colors(20)) 
} 

heatmapによって生成フォーマットに近づくために、あなただけのheatmap機能からいくつかのコードを再利用することができますオプション。色のブレークポイントの設定には、zlimよりも柔軟性があります。色より1 以上のブレークポイントを持っているし、昇順である必要があります、ヘルプページから引用breaks

色の有限数値ブレークポイントのセットです。ソートされていない ベクトルがソートされ、警告が表示されます。