2011-11-21 70 views
3

我想在R中製作一個熱圖,其中我的數據範圍從-5到+50。我希望0的值爲白色,0和-5之間的值以從白色到藍色的漸變着色,0到+50之間的值從白色到紅色着色。理想情況下,我也希望使用相同的縮放比例,即在-5處的藍色的黑色與在+5處的紅色的黑色相同。R熱圖着色取決於值高於或低於零

我有熱圖的工作代碼,整個數據集從藍色變爲紅色,白色着色點接近數據平均值。

hv <- heatmap.2(data_matrix, 
    scale="none", 
    Rowv=NA, 
    Colv=NA, 
    col = rev(brewer.pal(11,"RdBu")), 
    margins=c(5,5), 
    cexRow=0.5, cexCol=1.0, 
    ylab= "Mutations", 
    main = "heatmap", 
    key=TRUE,keysize=1.5, trace="none") 

任何建議將不勝感激。

乾杯!

+1

你有沒有在這最近的和非常類似的問題採取一看:http://stackoverflow.com/questions/8161014/custom-heat-map-in-r/8161231#8161231 –

+0

你的意思相反,你想要「在-5的藍色的黑暗與在+ 50 **的紅色的黑暗相同」?最後,你是否可以包含一個名爲'data_matrix'的小子矩陣(並調用'library(RColorBrewer)'和'library(gplots)'),使其成爲一個可重現的例子? –

回答

2

你需要添加這些給你的功能。 (5/6 * -5,5/6 * -4,5/6 * -3,5/6 * -2,5/6 * -1,0,5/6 * 1)

,50/6 * 1,50/6 * 2,50/6 * 3,50/6 * 4,50/6 * 5)

場所=斷裂

這指定您在使用場所熱圖。顏色 您可以嘗試迂迴而行數了一下,mayby添加一些色彩和斷裂,斷裂的數量應該是數+ 1

給予這樣的:

library(RColorBrewer) 
library(gplots) 
data_matrix <- cbind(c(rnorm(30,-2.5,sd= 0.85),rnorm(30,25,sd= 8),rnorm(30,6,sd= 3)), 
      c(rnorm(30,-2.5,sd= 0.85),rnorm(30,25,sd= 8),rnorm(30,6,sd= 3)), 
      c(rnorm(30,-2.5,sd= 0.85),rnorm(30,25,sd= 8),rnorm(30,6,sd= 3)), 
      c(rnorm(30,-2.5,sd= 0.85),rnorm(30,25,sd= 8),rnorm(30,6,sd= 3))) 

breaks = c(5/6* -5, 5/6* -4, 5/6* -3, 5/6* -2, 5/6* -1, 0 ,5/6* 1, 50/6*1, 50/6*2, 50/6*3, 50/6*4, 50/6*5) 
hv <- heatmap.2(data_matrix, 
    scale="none", 
    Rowv=NA, 
    Colv=NA, 
    col = rev(brewer.pal(11,"RdBu")), 
    margins=c(5,5), 
    cexRow=0.5, cexCol=1.0, 
    breaks=breaks, 
    ylab= "Mutations", 
    main = "heatmap", 
    key=TRUE,keysize=1.5, trace="none") 
2

如果您的數據從-5到+50去,具有正負值將使負顏色看起來幾乎全白了相同的梯度,

washedout

相比之下,全色調的版本是這樣的,

fullhue

+1

你是如何創建這個Baptiste的?下面的例子是我正在尋找的例子。 – Torvon

+0

@Torvon我寫了[一些自定義網格函數](https://github.com/baptiste/gridplot/blob/master/R/matrixGrob.r),但從來沒有處理過不幸的事情。 – baptiste

+0

你可以在你的答案中添加代碼(添加一個彩色標尺)嗎? –