使用ComplexHeatmap包绘制热图

加载所需R包

library(ComplexHeatmap)
require(circlize)
# 设置工作路径
setwd("/Users/Davey/Desktop/")
# 清除当前环境中的变量
rm(list=ls())

构建测试数据集

mat = matrix(rnorm(80, 2), 8, 10)
mat = rbind(mat, matrix(rnorm(40, -2), 4, 10))
rownames(mat) = letters[1:12]
colnames(mat) = LETTERS[1:10]
head(mat)
##           A        B         C          D         E         F        G
## a 2.8012969 2.448959 1.9428114  1.5604724 1.9177726 0.2158233 3.317781
## b 0.9418123 2.209306 2.7862192  1.4398838 3.6213657 4.2668243 2.577691
## c 1.0953206 2.341528 1.7046930  2.2206123 0.5952640 1.8767222 2.788628
## d 3.3537403 2.854183 1.2874279 -0.8889426 0.3848691 1.9383945 1.960331
## e 2.6451243 1.665598 2.1922587  1.7396285 2.9845466 2.4252669 4.630288
## f 1.3739374 2.331968 0.8226535  2.6943106 2.3148574 0.8938749 2.646258
##           H         I         J
## a 0.2706951 1.5700012 1.8710984
## b 1.7695180 2.6903054 1.3462785
## c 1.9808171 0.8263468 1.7852170
## d 1.6676294 1.7265879 1.4762889
## e 0.6262087 2.4486098 0.7309366
## f 1.3369390 0.2074835 1.5872041

使用Heatmap函数绘制热图

Heatmap(mat) #默认对行和列都进行聚类
image.png
# col参数自定义颜色,colorRamp2函数来自于circlize包
Heatmap(mat, col = colorRamp2(c(-5, 0, 5), c("green", "white", "red")))
image.png
# name参数设定图例标题
Heatmap(mat, name = "test")
image.png
# heatmap_legend_param参数设定图例的格式(标题,位置,方向,高度等)
Heatmap(mat, heatmap_legend_param = list(
  title= "legend", title_position = "topcenter", 
  legend_height=unit(8,"cm"), legend_direction="vertical"))
image.png
# row_title和column_title参数设定行和列的标题
Heatmap(mat, row_title = "blablabla", column_title = "blablabla")
image.png
# column_title_side参数设定列标题放置的位置,column_title_rot参数设定列标题文本旋转的角度
Heatmap(mat, column_title = "blablabla", column_title_side = "bottom", column_title_rot = 90)
image.png
# column_title_gp参数设定列标题文本的格式(字体,大小,颜色等)
Heatmap(mat, column_title = "blablabla", column_title_gp = gpar(fontsize = 20, fontface = "bold", col="red"))
image.png
# cluster_rows和cluster_columns参数设定行或列是否聚类
Heatmap(mat, cluster_rows = FALSE, cluster_columns = FALSE)
image.png
# clustering_distance_rows参数设定行聚类的距离方法,默认为"euclidean"
Heatmap(mat, clustering_distance_rows = "pearson")
image.png
Heatmap(mat, clustering_distance_rows = function(x) dist(x))
image.png
Heatmap(mat, clustering_distance_rows = function(x, y) 1 - cor(x, y))
image.png
# clustering_method_rows参数设定行聚类的方法,默认为"complete"
Heatmap(mat, clustering_method_rows = "single")
image.png
# row_dend_side参数设定行聚类树放置的位置
Heatmap(mat, row_dend_side = "right")
image.png
# row_dend_width参数设定行聚类树的宽度
Heatmap(mat, row_dend_width = unit(2, "cm"))
image.png
# row_names_side和column_names_side参数设置行名和列名存放的位置
Heatmap(mat, row_names_side = "left", row_dend_side = "right", 
        column_names_side = "top", column_dend_side = "bottom")
image.png
# show_row_names参数设定是否显示行名,show_row_dend参设设定是否显示行聚类树
Heatmap(mat, show_row_names = FALSE, show_row_dend = FALSE)
image.png
# row_names_gp参数设定行名文本的格式
Heatmap(mat, row_names_gp = gpar(fontsize = 20, fontface="italic", col="red"))
image.png
# km参数设定对行进行kmeans聚类分组的类数
Heatmap(mat, km = 4, row_title_gp = gpar(col=rainbow(4)), row_names_gp = gpar(col=rainbow(4), fontsize=20))
image.png

使用HeatmapAnnotation函数构建注释对象

annotation = data.frame(value = rnorm(10))
annotation = HeatmapAnnotation(df = annotation)
# top_annotation参数在顶部添加注释信息
Heatmap(mat, top_annotation = annotation)
image.png
annotation = data.frame(value = rnorm(10))
value = 1:10
ha = HeatmapAnnotation(df = annotation, points = anno_points(value), 
                       annotation_height = c(1, 2))
# top_annotation_height参数设定顶部注释信息展示的高度
Heatmap(mat, top_annotation = ha, top_annotation_height = unit(2, "cm"), 
        bottom_annotation = ha)
image.png

使用add_heatmap函数组合多个热图或注释信息

annotation1 = HeatmapAnnotation(df = data.frame(type = c(rep("A", 6), rep("B", 6))))
ht1 = Heatmap(mat, name = "test1", top_annotation = annotation1)

annotation2 = HeatmapAnnotation(df = data.frame(type1 = rep(c("A", "B"), 6), 
                                               type2 = rep(c("C", "D"), each = 6)))
ht2 = Heatmap(mat, name = "test2", bottom_annotation = annotation2)
add_heatmap(ht1, ht2)
image.png
# 添加point注释信息
ha = HeatmapAnnotation(points = anno_points(1:12, which = "row",gp= gpar(col=rainbow(12))), which = "row")
add_heatmap(ht1, ha)
image.png
# 添加barplot注释信息
ha = HeatmapAnnotation(barplot = anno_barplot(1:12, which = "row", bar_width=0.4, gp= gpar(fill="red")), which = "row")
add_heatmap(ht1, ha)
image.png
# 添加boxplot注释信息
ha = HeatmapAnnotation(boxplot = anno_boxplot(matrix(rnorm(60), nrow=12), which = "row", border = F, gp= gpar(fill="blue")), which = "row")
add_heatmap(ht2, ha)
image.png
# 添加histogram注释信息
ha = HeatmapAnnotation(histogram = anno_histogram(matrix(rnorm(48), nrow=12), which = "row", gp= gpar(fill="red")), which = "row")
add_heatmap(ht2, ha)
image.png
# 添加density注释信息
ha = HeatmapAnnotation(density = anno_density(matrix(rnorm(48), nrow=12), which = "row", type="heatmap"), which = "row")
add_heatmap(ht2, ha)
image.png

row_order和column_order函数获得热图聚类后行和列对应的顺序

row_order(ht1) #得到一个列表
## [[1]]
##  [1]  3  6  8  5  1  4  2  7 11 12 10  9
column_order(ht1) #得到一个向量
##  [1]  4  8 10  3  5  6  7  9  1  2
mat[row_order(ht1)[[1]],]
##            A          B          C          D          E          F
## c  1.0953206  2.3415277  1.7046930  2.2206123  0.5952640  1.8767222
## f  1.3739374  2.3319679  0.8226535  2.6943106  2.3148574  0.8938749
## h  1.9212146  2.0554681  2.2984488  2.1626922  0.7940837  1.3331693
## e  2.6451243  1.6655977  2.1922587  1.7396285  2.9845466  2.4252669
## a  2.8012969  2.4489591  1.9428114  1.5604724  1.9177726  0.2158233
## d  3.3537403  2.8541834  1.2874279 -0.8889426  0.3848691  1.9383945
## b  0.9418123  2.2093057  2.7862192  1.4398838  3.6213657  4.2668243
## g  3.2939952  1.6930804  3.6404261  1.0191843  2.6318222  3.8651897
## k -2.6225943 -1.5660520 -0.2162833 -1.5654904 -2.6135985 -3.3150684
## l -0.8009785 -0.2694706 -3.1642354 -2.1123275 -1.5482925 -1.3466843
## j -1.1355446 -2.4070908 -4.2075492 -2.3396374 -4.3409680 -2.9145455
## i -2.8700744 -2.9040941 -4.1061353 -2.6059058 -3.6201093 -2.5930123
##           G          H          I           J
## c  2.788628  1.9808171  0.8263468  1.78521698
## f  2.646258  1.3369390  0.2074835  1.58720410
## h  1.075480  1.7551531  1.0493876  0.04447524
## e  4.630288  0.6262087  2.4486098  0.73093658
## a  3.317781  0.2706951  1.5700012  1.87109836
## d  1.960331  1.6676294  1.7265879  1.47628891
## b  2.577691  1.7695180  2.6903054  1.34627848
## g  3.161174  1.7733364  0.5466857  1.22953346
## k -2.512614 -3.3644992 -2.1460842 -1.25187852
## l -0.344318 -2.3971692 -0.8973583 -1.29018334
## j -1.245340 -1.8870998 -0.5708714 -2.97128660
## i -1.561022 -2.1474388 -3.2070408 -1.63078877
mat[,column_order(ht1)]
##            D          H           J          C          E          F
## a  1.5604724  0.2706951  1.87109836  1.9428114  1.9177726  0.2158233
## b  1.4398838  1.7695180  1.34627848  2.7862192  3.6213657  4.2668243
## c  2.2206123  1.9808171  1.78521698  1.7046930  0.5952640  1.8767222
## d -0.8889426  1.6676294  1.47628891  1.2874279  0.3848691  1.9383945
## e  1.7396285  0.6262087  0.73093658  2.1922587  2.9845466  2.4252669
## f  2.6943106  1.3369390  1.58720410  0.8226535  2.3148574  0.8938749
## g  1.0191843  1.7733364  1.22953346  3.6404261  2.6318222  3.8651897
## h  2.1626922  1.7551531  0.04447524  2.2984488  0.7940837  1.3331693
## i -2.6059058 -2.1474388 -1.63078877 -4.1061353 -3.6201093 -2.5930123
## j -2.3396374 -1.8870998 -2.97128660 -4.2075492 -4.3409680 -2.9145455
## k -1.5654904 -3.3644992 -1.25187852 -0.2162833 -2.6135985 -3.3150684
## l -2.1123275 -2.3971692 -1.29018334 -3.1642354 -1.5482925 -1.3466843
##           G          I          A          B
## a  3.317781  1.5700012  2.8012969  2.4489591
## b  2.577691  2.6903054  0.9418123  2.2093057
## c  2.788628  0.8263468  1.0953206  2.3415277
## d  1.960331  1.7265879  3.3537403  2.8541834
## e  4.630288  2.4486098  2.6451243  1.6655977
## f  2.646258  0.2074835  1.3739374  2.3319679
## g  3.161174  0.5466857  3.2939952  1.6930804
## h  1.075480  1.0493876  1.9212146  2.0554681
## i -1.561022 -3.2070408 -2.8700744 -2.9040941
## j -1.245340 -0.5708714 -1.1355446 -2.4070908
## k -2.512614 -2.1460842 -2.6225943 -1.5660520
## l -0.344318 -0.8973583 -0.8009785 -0.2694706
# 得到热图聚类后顺序的数据
mat1 = mat[row_order(ht1)[[1]],column_order(ht1)]
write.table(mat1,file="reorder.txt",quote = FALSE,sep='\t')  #输出结果,按照热图中的顺序

使用densityHeatmap函数绘制密度热图

# 构建测试数据集
matrix = matrix(rnorm(100), 10); colnames(matrix) = letters[1:10]
# 默认不对列进行聚类,不显示聚类树
densityHeatmap(matrix)
image.png
# anno参数添加注释信息
densityHeatmap(matrix, anno = rep(c("A", "B"), each = 5), cluster_columns = T, show_column_dend = T)
image.png
# col参数自定义颜色
densityHeatmap(matrix, col = c("blue", "white", "red"), anno = rep(c("A", "B"), each = 5))
image.png
# 构建注释对象
ha = HeatmapAnnotation(points = anno_points(runif(10), gp=gpar(col=rainbow(10))))
densityHeatmap(matrix, anno = ha)
image.png
# 构建一个list
lt = list(rnorm(10), runif(10), rnorm(10))
densityHeatmap(lt)
image.png
sessionInfo()
## R version 3.5.1 (2018-07-02)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: OS X El Capitan 10.11.3
## 
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] zh_CN.UTF-8/zh_CN.UTF-8/zh_CN.UTF-8/C/zh_CN.UTF-8/zh_CN.UTF-8
## 
## attached base packages:
## [1] grid      stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
## [1] circlize_0.4.4        ComplexHeatmap_1.18.1
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_0.12.18        digest_0.6.16       rprojroot_1.3-2    
##  [4] backports_1.1.2     magrittr_1.5        evaluate_0.11      
##  [7] stringi_1.2.4       GlobalOptions_0.1.0 GetoptLong_0.1.7   
## [10] rmarkdown_1.10      RColorBrewer_1.1-2  rjson_0.2.20       
## [13] tools_3.5.1         stringr_1.3.1       yaml_2.2.0         
## [16] compiler_3.5.1      colorspace_1.3-2    shape_1.4.4        
## [19] htmltools_0.3.6     knitr_1.20
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容