使用ComplexHeatmap包绘制个性化热图

作者:刘梦瑶 诺禾致源 微生物信息

审稿:刘永鑫 中国科学院遗传与发育生物学研究所

ComplexHeatmap包由顾祖光博士创建,是一个非常全面的绘制热图的R包,可以利用它来绘制许多文献中的美图,例如下图展示的16S文献分析中的热图。这里主要介绍一下如何用这个R包来绘制类似的个性化热图。

检测安装加载包

# 检测安装CRAN包
package_list = c("circlize","grid","BiocManager")
for(p in package_list){
if (!requireNamespace(p, quietly = TRUE))install.packages(p)
}
# 检测安装bioconductor包
package_list = c("ComplexHeatmap")
for(p in package_list){
if (!requireNamespace(p, quietly = TRUE))BiocManager::install(p)
}# 加载依赖包
library(circlize)
library(grid)
library(ComplexHeatmap)

创建测试数据集

可以按照的Bioconductor官网上ComplexHeatmap包的说明来创建一个测试数据(http://bioconductor.org/packages/release/bioc/vignettes/ComplexHeatmap/inst/doc/s2.single_heatmap.html )

# 设置随机数种子,保证数据分析随机过程可重复
set.seed(123)
# 生成模拟数据:12行成10列矩阵
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)

一行命令绘图

使用默认参数,一行命令即可出图

#默认对行和列都进行聚类
Heatmap(mat)

调参美化

下面我们通过参数设置来进行个性化热图定制。

使用HeatmapAnnotation函数可以构建注释对象,我们可以进行自定义,也可以直接使用它的内置函数。

注释按位置来分类可分为行注释和列注释,以列注释为例,其内置函数按照图形的类型可以分为6种,anno_points(),anno_barplot(),anno_boxplot(),anno_histogram(),anno_density(),anno_text()。

行注释的内置函数和列注释类似,前面加上row即可,如row_anno_points()。
详细示例可参照网址:http://bioconductor.org/packages/release/bioc/vignettes/ComplexHeatmap/inst/doc/s4.heatmap_annotation.html 。

本文重点讨论anno_points()的用法。

# 生成包含10个0.5数值的向量
value = rep(0.5,10)
# 设置值、形状、大小、颜色等
ha = HeatmapAnnotation("type" = anno_points(value, pch=c(19,19,15,15,24,24,23,23,3,3), size = unit(7, "mm"),gp = gpar(col = c("#bf94e4","#bf94e4","#bf94e4","#bf94e4","#1dacd6","#1dacd6","#1dacd6","#1dacd6","red","red")),border=FALSE,ylim=c(0,1)),show_annotation_name = FALSE)

“type”为这一行注释的名称,show_annotation_name = FALSE,即不显示名称。pch可指定绘制点时使用的符号,共25种,如上三角,下三角,圆形,方形等,具体可见《R In Action》。size可指定符号的大小,gp可指定符号的颜色。

# 批量按行中心标准化,减均值除方差,Z-score
mat_scaled = apply(mat, 1, scale)
# 继续原数据表列名
rownames(mat_scaled) = colnames(mat)
# 转置才与原方向一致
mat_scaled = t(mat_scaled)
# 通过circlize包中的colorRamp2()函数,来自定义颜色
col_fun = circlize::colorRamp2(c(-3, 0, 3), c("black", "white", "yellow"))
# 新矩阵
shape<-mat_scaled
# 循环元素筛选,变为+或空,显著标记常用
x<-nrow(mat_scaled)
y<-ncol(mat_scaled)
for(i in 1:x ){for (j in 1:y ){if(shape[i,j]>=1){shape[i,j]<-"+";} else{shape[i,j]<-"";}}}

如需对数据进行标准化,需使用apply函数来处理数据。我们可以通过circlize包中的colorRamp2()函数,来自定义颜色。对mat_scaled的数值进行筛选,生成一个符号是加号或空值的新数据框。这一部分可以根据作图要求来自定义。

P1=Heatmap(mat_scaled,
name = "hello",
top_annotation = ha,
col = col_fun,
rect_gp = gpar(col = "black",lty = 2, lwd = 1),
cell_fun = function(j, i, x, y, width, height, fill) {grid.text(shape[i,j], x = x, y = y,gp = gpar(fontsize = 10,col="red"))},
cluster_rows = FALSE,
cluster_columns = FALSE,
row_names_side = "left",
column_names_side="bottom",
row_names_gp = gpar(col = c("#8B7500","#8B7500","#8B7500","#8B7500","#8B7500","#8B7500","#0000FF","#0000FF","#0000FF","#0000FF","#0000FF","#0000FF")))

name可定义图例的名称。top_annotation 可引用上面定义好的列注释, 并将列注释放在heatmap上方;bottom_annotation 则将列注释放在heatmap下方。rect_gp定义小方格的边框颜色,线条类型及宽度。cell_fun可以对heatmap的每个小方格进行自定义,这里用其来显示”+”号,也可以显示数字等。cluster_rows和cluster_columns可定义是否聚类。row_names_side可定义行名的显示位置,默认值right。column_names_side可定义列名的显示位置,默认值bottom。row_names_gp可定义列名的颜色。

# 行名第一列
texta = c("A","B","C","D","EEEEE","F","G","H","I","J","K","L")
# 行注释,宽度为最大文本
ha_texta =rowAnnotation(text = row_anno_text(texta), width = max_text_width(texta))
# 行名第二列
textb = c("M","N","O","P","Q","R","S","T","U","V","W","X")
ha_textb =rowAnnotation(text = row_anno_text(textb), width = max_text_width(textb))
# 添加行名注释
ht_list = P1 + ha_texta + ha_textb
# 添加图例对应文字、形状和颜色
lgd = legendGrob(c("A","B","C","D","E"), pch = c(19,15,24,23,3),gp= gpar(col =c("#bf94e4","#bf94e4","#1dacd6","#1dacd6","red")))
# 绘图,添加热图图例左,注释图例
draw(ht_list,heatmap_legend_side = "left",annotation_legend_list = list(lgd))

rowAnnotation中max_text_width可计算得到列名中最长的文本宽度,legendGrob可自定义图例的名称,形状,颜色。

猜你喜欢

10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature Cell专刊 肠道指挥大脑

系列教程:微生物组入门 Biostar 微生物组  宏基因组

专业技能:学术图表 高分文章 生信宝典 不可或缺的人

一文读懂:宏基因组 寄生虫益处 进化树

必备技能:提问 搜索  Endnote

文献阅读 热心肠 SemanticScholar Geenmedical

扩增子分析:图表解读 分析流程 统计绘图

16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

在线工具:16S预测培养基 生信绘图

科研经验:云笔记  云协作 公众号

编程模板: Shell  R Perl

生物科普:  肠道细菌 人体上的生命 生命大跃进  细胞暗战 人体奥秘

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。PI请明示身份,另有海内外微生物相关PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍末解决群内讨论,问题不私聊,帮助同行。

学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

点击阅读原文,跳转最新文章目录阅读

R包ComplexHeatmap绘制个性化热图相关推荐

  1. 使用ComplexHeatmap包绘制个性化热图

    文章目录 使用ComplexHeatmap包绘制个性化热图 检测安装加载包 创建测试数据集 一行命令绘图 调参美化 猜你喜欢 写在后面 使用ComplexHeatmap包绘制个性化热图 作者:刘梦瑶 ...

  2. php热图,科学网—使用ComplexHeatmap包绘制个性化热图 - 刘永鑫的博文

    使用ComplexHeatmap包绘制个性化热图 作者:刘梦瑶 诺禾致源 微生物信息 审稿:刘永鑫 中国科学院遗传与发育生物学研究所 ComplexHeatmap包由顾祖光博士创建,是一个非常全面的绘 ...

  3. 使用ComplexHeatmap绘制复杂热图|Note2:单个热图(万字超详细教程)

    2. 单个热图 2.1 颜色 2.2 标题 2.3 聚类 2.3.1 距离方法 2.3.2 聚类方法 2.3.3 渲染树状图 2.3.4 重排树状图 2.4 设置行列顺序 2.5 维度名称 2.6 热 ...

  4. 使用ComplexHeatmap绘制3D热图

    起因 ComplexHeatmap包有一个densityHeatmap()函数用来对一组分布进行可视化.例如下面的例子: library(ComplexHeatmap) set.seed(123) m ...

  5. 【R语言】——pheatmap包绘制聚类热图1(保姆级教程)

    一.前言 1 热图介绍 通常,热图是对所获得的数据或其他因素进行归一化处理后,用颜色的变化来直观表示不同样本间的变化情况.本质上其是由一个个用预设颜色表示数值大小的小方格组成的数据矩阵,并通过对因子或 ...

  6. R 实战| 几种常用的绘制离散变量热图/方块图/华夫图的方法

    R 实战| 几种常用的绘制离散变量热图/方块图/华夫图的方法 前言 常用方法 geom_tile ggwaffle ComplexHeatmap 总结 参考 往期 前言 多组学文章经常出现非连续变量的 ...

  7. r语言绘制精美pcoa图_R语言绘制交互式热图

    热图 通过热图可以简单地聚合大量数据,并使用一种渐进的色带来优雅地表现,最终效果一般优于离散点的直接显示,可以很直观地展现空间数据的疏密程度或频率高低.但也由于很直观,热图在数据表现的准确性并不能保证 ...

  8. R语言绘制相关性热图

    1. ggplot2包ggplot函数绘制相关性热图 ### 1. ggplot2包ggplot函数绘制相关性热图 rm(list = ls()) head(mtcars[,1:6]) #查看前六行六 ...

  9. 使用基于ggplot2的包ggalluvial绘制桑基图(冲积图)

    1. 使用基于ggplot2的包ggalluvial绘制桑基图(冲积图) 参考:https://corybrunson.github.io/ggalluvial/articles/ggalluvial ...

最新文章

  1. 阿里AI再摘一冠,大幅提高视觉对话世界纪录
  2. 11.3-全栈Java笔记:线程的生命周期
  3. JVM Server与Client运行模式
  4. 计算机主机组装的过程,电脑主机组装需要怎样的操作流程简单至极?
  5. python 3 5_零基础学Python3(5):基础运算符(上)
  6. delphi 参数化sql
  7. LeetCode 1417. 重新格式化字符串
  8. TDA-04D8变送器数据上报阿里云
  9. OpenMP并行加速笛卡尔乘积
  10. linux怎么用中文显示,linux中文显示设置
  11. 使用libjpeg-turboYUV转JPG
  12. 14、弱电工程综合布线系统常用的线材及设备图文资料
  13. 统信软件宣布旗下深度社区全新规划 打造我国主导的全球桌面系统根社区
  14. 计算机毕业设计Python+uniapp养花助手小程序(小程序+源码+LW)
  15. Word怎样设置处理表格与表格标题之间的间距问题
  16. 【Chapter 3: Process】
  17. Java找对象笑话,搞笑找对象的句子
  18. 关于人机智能若干问题的思考
  19. 国际最顶尖的AI技术发展,愈像一场比拼资金与人才的竞赛
  20. 二、四维拟合股市理论的时空哲学

热门文章

  1. 线上经验总结:一台 Java 服务器可以跑多少个线程?
  2. 你可能不知道的 IDEA 高级调试技巧
  3. 哈啰程序员吐槽:试用期带5个人创造了部门历史最高成绩,结果却被辞退
  4. 什么是DevOps的基石?为什么顶级公司都离不开它?
  5. 电商企业为什么要搞中台?
  6. ArUco估计位姿原理
  7. 嵌入式学习笔记之三 (uboot我来看)
  8. linux 进程 内存 换入换出,linux - 在从bash进程替换完成输入后,如何继续发送到stdin? - 堆栈内存溢出...
  9. 02面向对象设计原则
  10. 彻底剖析激光-视觉-IMU-GPS融合SLAM算法:理论推导、代码讲解和实战