这个问题,其实答案就存在于《听说你还不会画热图》,我们先生成一个矩阵:

set.seed(2017-11-12)
d = data.frame(matrix(rnorm(100), ncol=10))
colnames(d) = paste0('t', 1:10)
rownames(d) = paste0('g', 1:10)

这个矩阵是rnorm生成的随机数,有正有负,我们再生成一个矩阵,只有正数,并且数值上比第一个矩阵要大:

d2 = abs(d) * 1.2

下面这个代码来自于《听说你还不会画热图》,定义一个color palette函数:

library(RColorBrewer)
cc = colorRampPalette(rev(brewer.pal(n = 7, 
     name = "RdYlBu")))	

有了这个函数,那么这个问题就极其简单,无非是不同的数据集pool在一起取最大最小值,然后切出一堆等长区间,用上面定义的cc函数给每个区间分配一个颜色,然后用这个配色方案给不同的热图上色,那么产生的热图就拥有了同一个颜色区间。

breaks = seq(min(unlist(c(d, d2))), 
	max(unlist(c(d, d2))), length.out=100)

library(pheatmap)

p1 = pheatmap(d, color=cc(100), breaks=breaks)
p2 = pheatmap(d2, color=cc(100), breaks=breaks)

cowplot::plot_grid(p1$gtable, p2$gtable, ncol=2)

电梯