ComplexHeatmap |理解绘图逻辑绘制热图

作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源。

之前热图三部曲介绍了使用ggplot2和pheatmp绘制热图

R语言学习 - 热图绘制 (heatmap)  

R语言学习 - 热图美化  

R语言学习 - 热图简化

后来2017年最后学习1010个热图绘制方法简略介绍了10种热图绘制方式,CIRCOS增加热图、点图、线图和区块属性是另一种形式的热图。当然最简单的还是使用高颜值可定制在线绘图工具-第三版直接在线绘制。

知识学杂了也可以融会贯通,下面看看的Complexheatmap绘图逻辑,应该会对理解数据、图形、程序有些新的体会。

简介

Complexheatmap是由DKFZ的顾祖光博士创建的绘制热图的R包,基于绘图系统grid,因此如果有相应grid的知识,学习起来应该更顺手。在他的GitHub有十分详细的说明

(https://github.com/jokergoo/ComplexHeatmap)。

设计

Complexheatmap提供了一套非常灵活的方法用于多热图也就是热图列表布局以及支持自定义注释绘图,一个热图列表包含若干热图以及注释信息。

绘制单个热图

安装

包的安装就不细说了,R语言学习 - 基础概念和矩阵操作中有详细的教程,下面直接给出安装代码。

# installed from bioconductor
source("http://bioconductor.org/biocLite.R")
options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")
biocLite("ComplexHeatmap")

# 或者直接从Github安装
# installed from GitHub
if(!require(devtools)){install.packages("devtools")}
devtools::install_github("jokergoo/ComplexHeatmap")

创建数据集

# pacman::p_load加载包,若不存在会自动安装
# 用在这不太合适,因为这个包是bioconductor的包,自动安装是调用install.packages,
# 具体没测试,可能会失败

pacman::p_load(ComplexHeatmap, circlize)

# 设置随机数种子,保证随机数据一致
set.seed(7)
mat <- cbind(rbind(matrix(rnorm(16, -1),4), matrix(rnorm(32, 1), 8)), rbind(matrix(rnorm(24, 1), 4), matrix(rnorm(48, -1), 8)))
mat <- mat[sample(nrow(mat), nrow(mat)), sample(ncol(mat), ncol(mat))]
rownames(mat) <- paste0("R", 1:12)
colnames(mat) <- paste0("C", 1:10)
# 常规矩阵就可以
mat

绘图

ComplexHeatmap绘制热图十分简单,使用默认参数

# 大写的H
Heatmap(mat)

定制化

ComplexHeatmap十分灵活,可以自定义多种参数绘制热图。

颜色

大多数情况下,绘制热图的矩阵都是连续性变量,通过提供颜色映射函数,我们可以自定义颜色,颜色选择和搭配见史上最全的图表色彩运用原理。这主要是通过circlize包中的colorRamp2()函数来实现的。

mat2 <- mat
mat2[1,1] <- 100000
# 设置颜色,并且不做行列聚类
Heatmap(mat2, col = colorRamp2(c(-3,0,3), c("green","white","red")), cluster_rows = FALSE, cluster_columns = FALSE)

试试彩虹色

Heatmap(mat, col = rev(rainbow(10)))

如果是离散型变量或者数值型当做离散数据、字符型变量的话,这时就需要特别指定颜色了

#离散型变量/数值型变量
discrete_mat <- matrix(sample(1:4, 100, replace = TRUE), 10, 10)
colors <- structure(circlize::rand_color(4), names=c("1","2","3","4"))
Heatmap(discrete_mat, col = colors)

#字符型变量
character_mat <- matrix(sample(letters[1:4], 100, replace = TRUE), 10, 10)
colors <- structure(circlize::rand_color(4), names=letters[1:4])
Heatmap(character_mat, col = colors)

可以看出,对于数值型变量,默认对行/列进行聚类,而对于字符型变量,则不进行聚类。

ComplexHeatmap允许数据中含有NA,只需要通过参数na_col来控制NA的颜色。

mat_with_NA <- mat
mat_with_NA[sample(c(TRUE, FALSE), nrow(mat)*ncol(mat), replace = TRUE, prob = c(1,9))] <- NA
Heatmap(mat_with_NA, na_col = "orange", clustering_distance_rows = "pearson")

ComplexHeatmap默认使用LAB颜色空间(LAB color space),colorRamp2()提供了选择颜色空间的参数选项

f1 <- colorRamp2(seq(min(mat), max(mat), length=3), c("blue","#EEEEEE", "red"))
f2 <- colorRamp2(seq(min(mat), max(mat), length=3), c("blue","#EEEEEE", "red"), space = "RGB")
H1 <- Heatmap(mat, col = f1, column_title = "LAB color space")
H2 <- Heatmap(mat, col = f2, column_title = "RGB color space")
H1+H2

ComplexHeatmap提供了多种颜色空间选项,可以根据自身数据不断调整,选取合适的颜色空间。

标题

一个热图的标题有:图标题、图例标题、行列标题等, Heatmap里提供的name参数默认的是图例的标题

Heatmap(mat, name = "legend")

图例标题也可以通过heatmap_legend_param()进行修改

Heatmap(mat, heatmap_legend_param = list(title="legend"))

行列标题

Heatmap(mat, name = "legend", column_title = "Column", row_title = "Row")

Heatmap(mat, name = "legend", column_title = "Column", column_title_side = "bottom")

如果需要修改字体、字号,可以通过gpar()参数

Heatmap(mat, name = "legend",column_title = "Column", row_title = "Row", column_title_gp = gpar(fontsize=20, fontface="bold"), row_title_gp = gpar(fontsize=20, fontface="bold"))

标题可以旋转(水平或竖直)

Heatmap(mat, name = "legend", row_title = "Row", row_title_rot = 0)

SessionInfo

sessionInfo()


## R version 3.4.4 (2018-03-15)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 16299)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=Chinese (Simplified)_China.936
## [2] LC_CTYPE=Chinese (Simplified)_China.936  
## [3] LC_MONETARY=Chinese (Simplified)_China.936
## [4] LC_NUMERIC=C                              
## [5] LC_TIME=Chinese (Simplified)_China.936    
##
## attached base packages:
## [1] grid      stats     graphics  grDevices utils     datasets  methods  
## [8] base    
##
## other attached packages:
## [1] circlize_0.4.3        ComplexHeatmap_1.17.1
##
## loaded via a namespace (and not attached):
##  [1] Rcpp_0.12.16         digest_0.6.15        rprojroot_1.3-2    
##  [4] backports_1.1.2      pacman_0.4.6         magrittr_1.5        
##  [7] evaluate_0.10.1      GlobalOptions_0.0.13 stringi_1.1.7      
## [10] GetoptLong_0.1.6     rmarkdown_1.9        RColorBrewer_1.1-2  
## [13] rjson_0.2.15         tools_3.4.4          stringr_1.3.0      
## [16] yaml_2.1.18          compiler_3.4.4       colorspace_1.3-2    
## [19] shape_1.4.4          htmltools_0.3.6      knitr_1.20


R统计和作图

高颜值免费在线绘图

往期精品

画图三字经 生信视频 生信系列教程 

心得体会 TCGA数据库 Linux Python 

高通量分析 免费在线画图 测序历史 超级增强子

生信学习视频 PPT EXCEL 文章写作 ggplot2

海哥组学 可视化套路 基因组浏览器

色彩搭配 图形排版 互作网络

自学生信 2019影响因子 GSEA 单细胞 

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信宝典

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值