聚类热图——pheatmap和complexheatmap

参考

pheatmap包 >CRAN - Package pheatmap (r-project.org)
complexheatmap包 > Bioconductor - ComplexHeatmap
complexheatmap官方文档 >ComplexHeatmap Complete Reference (jokergoo.github.io)
complexheatmap原始文献 > 10.1093/bioinformatics/btw313

ComplexHeatmap 实战

参数介绍里面很丰富,但具体细节可能需要多做几张图才能慢慢体会!
下载及练习使用的矩阵在下面代码:

#下载可以通过GitHub和biocmanage两种,前者最新版本,后者稳定版本
library(devtools)
install_github("jokergoo/ComplexHeatmap")
sessionInfo()
library(ComplexHeatmap)

#这个矩阵是官方document提供的
set.seed(123)
nr1 = 4; nr2 = 8; nr3 = 6; nr = nr1 + nr2 + nr3
nc1 = 6; nc2 = 8; nc3 = 10; nc = nc1 + nc2 + nc3
mat = cbind(rbind(matrix(rnorm(nr1*nc1, mean = 1,   sd = 0.5), nr = nr1),
                  matrix(rnorm(nr2*nc1, mean = 0,   sd = 0.5), nr = nr2),
                  matrix(rnorm(nr3*nc1, mean = 0,   sd = 0.5), nr = nr3)),
            rbind(matrix(rnorm(nr1*nc2, mean = 0,   sd = 0.5), nr = nr1),
                  matrix(rnorm(nr2*nc2, mean = 1,   sd = 0.5), nr = nr2),
                  matrix(rnorm(nr3*nc2, mean = 0,   sd = 0.5), nr = nr3)),
            rbind(matrix(rnorm(nr1*nc3, mean = 0.5, sd = 0.5), nr = nr1),
                  matrix(rnorm(nr2*nc3, mean = 0.5, sd = 0.5), nr = nr2),
                  matrix(rnorm(nr3*nc3, mean = 1,   sd = 0.5), nr = nr3))
)
mat = mat[sample(nr, nr), sample(nc, nc)] # random shuffle rows and columns
rownames(mat) = paste0("row", seq_len(nr))
colnames(mat) = paste0("column", seq_len(nc))

第一部分 Heatmap函数

直接实战来认识参数

图一涉及到颜色,标题,分版块等

图一

代码展示

Heatmap(mat,
        name = "mat",
        col=colorRamp2(c(-2,0,2),c('skyblue2','white','red3')),  #颜色设置
        color_space = "RGB",
        border = T,
        cluster_columns = F,
        cluster_rows = F,

        row_order=NULL,                                 
        column_order=NULL,
        column_title_side = "bottom",                     #设置行名及列名具体格式
        column_title_gp = gpar(fontsize=13,fondface="bold"),
        row_title_gp = gpar(fontsize=13,fondface="bold"),
        row_split = factor(c(rep(c("gene A","gene B","gene C"),time= c(4,6,8))),    #根据行列分版块
                           levels = c("gene A","gene B","gene C")),
        column_split = factor(c(rep(c("low risk","high risk"),12)),
                              levels =c("low risk","high risk"),
                              labels = c("low risk","high risk")),
        show_column_names = F)

第二部分 Annotation

注释主要用到HeatmapAnnotation这个参数,参数使用直接上图来体会

图二涉及到注释

图二
#图二
Heatmap(matrix(rnorm(100), 10), 
       col = colorRamp2(c(-2,0,2),c("skyblue","white","red3")),
        show_row_names = F,
        row_split = rep(c("model 1","model 2","model3"),time=c(2,3,5)),
        row_title_gp = gpar(fontsize=14,fontface='bold'),
        top_annotation = HeatmapAnnotation(foo = anno_block(gp = gpar(fill = 2:4),
                                                            labels = c("group1", "group2", "group3"), 
                                                            labels_gp = gpar(col = "white", fontsize = 10))),
        cluster_rows = F,
        cluster_columns = F,
        column_split = rep(1:3,time=c(2,3,5)),
        show_column_names = F)

·

简单认识参数之后,那就开始吧,实战一

实战一

中的一张简单的热图,热图中5中signature在不同分组 中的表达,注释文件时是


实战一

.

一个小时搞定

实战一

代码如下:

mat <- matrix(rnorm(500),nrow = 5)
colnames(mat) <- paste0("sample",1:100)
rownames(mat) <- paste0("signature",c(1,16,3,2,13))

cli <- data.frame(Tobacoo=sample(c("No","Yes"),100,replace = T),
                  Alchoal=sample(c("No","Yes"),100,replace = T),
                  HPV16=c(sample(c("No","Yes"),30,replace = T),rep("No",20),rep("Yes",30),rep("No",20)),
                  cluster=rep(c("A","B","C1","C2"),time=c(20,30,30,20)))
cli$Tobacoo <- factor(cli$Tobacoo)
Tobacoo <- c(pal_nejm()(8)[1],pal_nejm()(8)[2])
names(Tobacoo) <- c("Yes","No")
cli$Alchoal <- factor(cli$Alchoal)
Alchoal <- c(pal_nejm()(8)[1],pal_nejm()(8)[2])
names(Alchoal) <-c("Yes","No")
cli$HPV16 <- factor(cli$HPV16)
HPV16<- c(pal_nejm()(8)[1],pal_nejm()(8)[2])
names(HPV16)<- c("Yes","No")
cli$cluster <- factor(cli$cluster)
cluster <- c(pal_nejm()(8)[3],pal_nejm()(8)[4],pal_nejm()(8)[5],pal_nejm()(8)[6])
names(cluster) <- c("A","B","C1","C2")

library(ComplexHeatmap)
library(circlize)
library(ggsci)
Heatmap(mat,col = colorRamp2(c(-2,0,2),c("skyblue2","white","red2")),
        color_space = "RGB",
        
        column_split = factor(rep(c("A","B","C"),time=c(20,30,50))),
        cluster_columns = F,
        show_column_names = F,
        top_annotation = HeatmapAnnotation( Tobacoo=cli$Tobacoo,
                                            Alchoal=cli$Alchoal,
                                            HPV16=cli$HPV16,
                                            cluster=cli$cluster,
                                            annotation_legend_param=list(labels_gp = gpar(fontsize = 9),
                                                                         title_gp = gpar(fontsize = 9, fontface = "bold"),
                                                                         ncol=1),
                                            
                                            col = list(Tobacoo=Tobacoo,
                                                       Alchoal=Alchoal,
                                                       HPV16=HPV16,
                                                       cluster=cluster),
                                            show_annotation_name = TRUE,
                                            annotation_name_side="right",
                                            annotation_name_gp = gpar(fontsize = 9, fontface = "bold")))


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容