做组学分析的时候,想用热图展示差异基因的情况。很多时候尤其转录组,可能得到上千个差异基因,这时候画热图不可能将所有基因的名称显示,一方面太啰嗦,一方面放不下。那么这种既想展示差异基因在样本表达中的全局情况,又想显示基因名称(自己感兴趣的或者对于研究比较关键的),怎么操作呢?接着看:
首先,准备画热图需要的文件,基因表达矩阵。(示例数据,自己瞎编的,没有任何意义)
将数据入读R:
setwd("D:/生物信息学")
A <- read.csv("热图标注特定基因.csv", header = T,row.names = 1)
一般情况下用pheatmap画简单的热图,不过复杂的热图就需要用其他的包了,也就是ComplexHeatmap,学会它,在复杂的热图都能搞定。
加载包:
library(ComplexHeatmap)
先绘制一个很常规的热图:
A <- as.matrix(A) #将表达矩阵转化为matrix
samples <- rep(c('Control', 'Treat'), c(3, 3)) #定义样本分组信息
for (i in 1:nrow(A)) A[i, ] <- scale(log(unlist(A[i, ] + 1), 2)) #对数据进行标准化处理
B <- Heatmap(A,#表达矩阵
col = colorRampPalette(c("navy","white","firebrick3"))(100),#颜色定义
show_row_names = F,#不展示行名
top_annotation = HeatmapAnnotation(Group = samples,
simple_anno_size = unit(2, 'mm'),
col = list(Group = c('Control' = '#00DAE0', 'Treat' = '#FF9289')),
show_annotation_name = FALSE))#分组注释
做出的效果如下:
接下来,注释需要展示的基因信息。手动输入或者做一个列表读入,此外为了方便自己创建了一个gene list。
genes <- c("S100A10",
"S100A11",
"S100A9",
"S100A8",
"ILF2",
"RPS27",
"HAX1",
"SNRPE",
"SLFN5",
"CCL5",
"SYNRG",
"MLLT6",
"RPL23",
"NCOA4",
"BUD31",
"TNIP1",
"KDM6B",
"SMG1")
genes <- as.data.frame(genes)
将注释信息添加到热图中:
B + rowAnnotation(link = anno_mark(at = which(rownames(A) %in% genes$genes),
labels = genes$genes, labels_gp = gpar(fontsize = 10))
做出来的效果如下:一张完美的热图出现了!
除了这个方法,也有人自己编写函数,比复杂。我认为这种能简单就简单,达到自己的目的,取得美化的效果就可以了!