投稿问答最小化  关闭

万维书刊APP下载

画热图只标注感兴趣的基因名称

2022/5/23 8:41:05  阅读:289 发布者:

做组学分析的时候,想用热图展示差异基因的情况。很多时候尤其转录组,可能得到上千个差异基因,这时候画热图不可能将所有基因的名称显示,一方面太啰嗦,一方面放不下。那么这种既想展示差异基因在样本表达中的全局情况,又想显示基因名称(自己感兴趣的或者对于研究比较关键的),怎么操作呢?接着看:

首先,准备画热图需要的文件,基因表达矩阵。(示例数据,自己瞎编的,没有任何意义)

将数据入读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)))

做出来的效果如下:一张完美的热图出现了!

除了这个方法,也有人自己编写函数,比复杂。我认为这种能简单就简单,达到自己的目的,取得美化的效果就可以了!

转自:KS科研分享与服务

如有侵权,请联系本站删除!


  • 万维QQ投稿交流群    招募志愿者

    版权所有 Copyright@2009-2015豫ICP证合字09037080号

     纯自助论文投稿平台    E-mail:eshukan@163.com