R Heatmap的值低于0红色,高于0蓝色渐变

时间:2014-07-21 14:37:32

标签: r colors heatmap

我的热图范围从-100到100.我希望任何低于0的值都是红色,而高于0的值是蓝色渐变。

我已经看过获得红色和蓝色渐变的例子,但红色不是常红色。

到目前为止我已尝试过:

bk = c(seq(-100,-0.1,length=1), seq(-0.1,0.1,length=1), seq(0.1,100,length=100))
rc1 <- colorRampPalette(colors = c("red"))
rc2 <- colorRampPalette(colors = c("blue"))(length(bk)-1)
hmcols <- c(rc1, rc2)

但我收到了错误

"Error in image.default(1:nc, 1:nr, x, xlim = 0.5 + c(0, nc), ylim = 0.5 +  : 
  must have one more break than colour"

1 个答案:

答案 0 :(得分:3)

这是一个这样的情节的例子

#breaks
bk <- c(-100,seq(0,100,by=10))
#colors (one less than breaks
mycols <- c("red",colorRampPalette(colors = c("white","blue"))(length(bk)-2))

#sample data
z <- matrix(runif(25*25, -100, 100), ncol=25)

#plot
heatmap(z, col=mycols, breaks=bk, scale="none")

enter image description here

请注意,为了获得您想要的特定颜色,我们使用一次调用colorRampPalette传递您想要在其间转换的三种颜色(假设白色是中间范围的可接受的中性色)。我们还使用scale="none",因为默认情况下它会缩放0到1之间的值。因此,如果要在原始值范围内保留中断,则需要禁用缩放。