ComplexHeatmap |理解绘图逻辑绘制热图
作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源。
之前热图三部曲介绍了使用ggplot2和pheatmp绘制热图
后来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统计和作图
Graphpad,经典绘图工具初学初探 维恩(Venn)图绘制工具大全 (在线+R包) 在R中赞扬下努力工作的你,奖励一份CheatShet 别人的电子书,你的电子书,都在bookdown R语言 - 入门环境Rstudio R语言 - 热图绘制 (heatmap) R语言 - 基础概念和矩阵操作 R语言 - 热图简化 R语言 - 热图美化 R语言 - 线图绘制 R语言 - 线图一步法 R语言 - 箱线图(小提琴图、抖动图、区域散点图) R语言 - 箱线图一步法 R语言 - 火山图 R语言 - 富集分析泡泡图 R语言 - 散点图绘制 R语言 - 韦恩图 R语言 - 柱状图 R语言 - 图形设置中英字体 R语言 - 非参数法生存分析 R语言 - 绘制seq logo图 WGCNA分析,简单全面的最新教程 psych +igraph:共表达网络构建 一文学会网络分析——Co-occurrence网络图在R中的实现 一文看懂PCA主成分分析 富集分析DotPlot,可以服 基因共表达聚类分析和可视化 R中1010个热图绘制方法 还在用PCA降维?快学学大牛最爱的t-SNE算法吧, 附Python/R代码 一个函数抓取代谢组学权威数据库HMDB的所有表格数据 文章用图的修改和排版 network3D: 交互式桑基图 network3D 交互式网络生成 Seq logo 在线绘制工具——Weblogo 生物AI插图素材获取和拼装指导 ggplot2高效实用指南 (可视化脚本、工具、套路、配色) 图像处理R包magick学习笔记 SOM基因表达聚类分析初探 利用gganimate可视化全球范围R-Ladies(R社区性别多样性组织)发展情况 一分钟绘制磷脂双分子层:AI零基础入门和基本图形绘制 AI科研绘图(二):模式图的基本画法 你知道R中的赋值符号箭头(<-)和等号(=)的区别吗? R语言可视化学习笔记之ggridges包 利用ComplexHeatmap绘制热图(一) ggplot2学习笔记之图形排列 R包reshape2,轻松实现长、宽数据表格转换 用R在地图上绘制网络图的三种方法 PCA主成分分析实战和可视化 附R代码和测试数据 iTOL快速绘制颜值最高的进化树! 12个ggplot2扩展包帮你实现更强大的可视化 编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出 R语言统计入门课程推荐——生物科学中的数据分析Data Analysis for the Life Sciences 数据可视化基本套路总结 你知道R中的赋值符号箭头 <-
和等号=
的区别吗?使用dplyr进行数据操作30例 交集intersect、并集union、找不同setdiff R包reshape2,轻松实现长、宽数据表格转换 1数据类型(向量、数组、矩阵、 列表和数据框) 2读写数据所需的主要函数、与外部环境交互 3数据筛选——提取对象的子集 4向量、矩阵的数学运算 5控制结构 6函数及作用域 7认识循环函数lapply和sapply 8分解数据框split和查看对象str 9模拟—随机数、抽样、线性模型 1初识ggplot2绘制几何对象 2图层的使用—基础、加标签、注释 3工具箱—误差线、加权数、展示数据分布 4语法基础 5通过图层构建图像 6标度、轴和图例 7定位-分面和坐标系 8主题设置、存储导出 9绘图需要的数据整理技术 创建属于自己的调色板 28个实用绘图包,总有几个适合你 热图绘制 R做线性回归 绘图相关系数矩阵corrplot 相关矩阵可视化ggcorrplot 绘制交互式图形recharts 交互式可视化CanvasXpress 聚类分析factoextra LDA分析、作图及添加置信-ggord 解决散点图样品标签重叠ggrepel 添加P值或显著性标记ggpubr Alpha多样性稀释曲线rarefraction curve 堆叠柱状图各成分连线画法:突出组间变化 冲击图展示组间时间序列变化ggalluvial 桑基图riverplot 微生物环境因子分析ggvegan 五彩进化树与热图更配ggtree 多元回归树分析mvpart 随机森林randomForest 分类Classification 回归Regression 加权基因共表达网络分析WGCNA circlize包绘制circos-plot R语言搭建炫酷的线上博客系统 28个实用绘图包,总有几个适合你 热图绘制 R做线性回归 绘图相关系数矩阵corrplot 相关矩阵可视化ggcorrplot 绘制交互式图形recharts 交互式可视化CanvasXpress 聚类分析factoextra LDA分析、作图及添加置信-ggord 解决散点图样品标签重叠ggrepel 添加P值或显著性标记ggpubr Alpha多样性稀释曲线rarefraction curve 堆叠柱状图各成分连线画法:突出组间变化 冲击图展示组间时间序列变化ggalluvial 桑基图riverplot 微生物环境因子分析ggvegan 五彩进化树与热图更配ggtree 多元回归树分析mvpart 随机森林randomForest 分类Classification 回归Regression 加权基因共表达网络分析WGCNA circlize包绘制circos-plot R语言搭建炫酷的线上博客系统 维恩(Venn)图绘制工具大全 (在线+R包) R包circlize:柱状图用腻了?试试好看的弦状图 获取pheatmap聚类后和标准化后的结果 增强火山图,要不要试一下? 一个震撼的交互型3D可视化R包 - 可直接转ggplot2图为3D 赠你一只金色的眼 - 富集分析和表达数据可视化 是Excel的图,不!是R的图 道友,来Rstudio里面看动画了 用了这么多年的PCA可视化竟然是错的!!! R语言可视化学习笔记之ggridges包
万能转换:R图和统计表转成发表级的Word、PPT、Excel、HTML、Latex、矢量图等
那天空飘过的梅花月饼,是今年中秋最好的礼物
高颜值免费在线绘图
往期精品
后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集