不同数据集画出的热图,用同样的颜色区间上色?
这个问题,其实答案就存在于《听说你还不会画热图》,我们先生成一个矩阵:
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)