2011-11-21 100 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

你可以在你的答案中添加代码(添加一个彩色标尺)吗? –