使用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)

创建测试数据集# 设置随机数种子,保证数据分析随机过程可重复

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()。

本文重点讨论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

# 循环元素筛选,变为+或空,显著标记常用

x

y

for(i in 1:x ){

for (j in 1:y ){

if(shape[i,j]>=1){

shape[i,j]

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可自定义图例的名称,形状,颜色。

猜你喜欢

写在后面

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

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

转载本文请联系原作者获取授权,同时请注明本文来自刘永鑫科学网博客。

链接地址:http://blog.sciencenet.cn/blog-3334560-1161717.html

上一篇:[转载]使用ComplexHeatmap包绘制个性化热图

下一篇:Microbiome:应用多维宏组学方法协同揭示复杂细菌群落对目标底物代谢的菌间相互关系

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

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

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

  2. 核心微生物分析_科学网—微生物组核心OTU鉴定usearch otutab_core - 刘永鑫的博文...

    otutab_core 鉴定核心微生物组--大多数样品中出现的OTUs,这也是Usearch11新增的功能. 本质上是统计每个OTUs在大量样品中出现的频率.比如在所有样本中都出现,即100%.特别大 ...

  3. matlab 画qq图,科学网—[转载]R语言绘制QQ图 - 刘朋的博文

    R语言绘制QQ图 实例1: #############加载数据 data R R=apply(R,2,as.numeric) #R语言将字符串矩阵转化为数值型矩阵,apply()函数里面的第2个值,如 ...

  4. matlab2014的m文件画波形,科学网—用MATLAB软件绘制驻波的波形图 - 李金磊的博文...

    已知驻波的运动学方程为 y=2Acos(2πx/λ)cos(ωt) 相应的MATLAB程序为 syms lambda omega; y=2*A.*cos(2*pi*x./lambda).*cos(om ...

  5. R包ComplexHeatmap绘制个性化热图

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

  6. ComplexHeatmap包绘制热图(二)

    前面我介绍了如何利用ComplexHeatmap包绘制简单的热图,现在我们绘制一个稍微复杂一些的热图 首先还是配置数据 data=matrix(rnorm(100),nrow=10) colnames ...

  7. 包包的结构制图_科学网—R包circlize:柱状图用腻了?试试好看的弦状图 - 刘永鑫的博文...

    [TOC] 柱状图用腻了?试试好看的弦状图 作者:郑伟 西北农林科技大学 责编:刘永鑫 中科院遗传发育所 弦图简介 总体来讲,弦图是一种可视化微生物物种或基因相对丰度的方法.平时大多数时间我们看到的文 ...

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

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

  9. R语言:使用ComplexHeatmap包绘制热图

    ComplexHeatmap包由顾祖光博士创建,用于绘制美观的热图,用颜色表示数据的聚合程度,相对美观. 使用手册见GitHub链接: https://jokergoo.github.io/Compl ...

最新文章

  1. 关于Docker的理解
  2. OpenAI高调站队:深度学习框架以后主要用PyTorch
  3. Printed Exception strings - what do all those flags mean?(转)
  4. 多级菜单栏展开隐藏动画
  5. 博士申请 | 香港浸会大学万人杰教授招收计算机视觉全奖博士生/研究助理
  6. 为员工长工资。从最低工资调起每人长10%,请计算长工资的人数和长工资后的工资总额,并输出输出长工资人数及工资总额。
  7. 汇编语言学习笔记-按指定的字体输出文本
  8. 使用SpringMVC 的MultipartFile文件上传时参数获取的一个坑
  9. python动态_python的动态性和_slot_
  10. 一个html5流星雨源码
  11. 在linux下vcd光盘提取,linux下抓取Vcd的视频文件[Linux安全]
  12. Java集合框架讲解【泛型、Collection接口、Map接口、以及子接口和实现类、集合的遍历形式等】
  13. 高仿iOS微信客户端
  14. python 购物车总额_python之购物车
  15. JavaWeb面试题
  16. 最近整理的Android学习笔记
  17. 微信小程序云开发授权登录的简易制作
  18. 左神---基础提升笔记
  19. 判断奇数还是偶数【c语言】
  20. AD使用中各个层的含义,阻焊层与驻焊层的区别;

热门文章

  1. 【深度学习概述学习小结】
  2. iOS6.x完美越狱后 等待你的那些完美插件
  3. 《杰克.韦尔奇自传》读书笔记
  4. thingsboard之边缘网关建立连接过程
  5. js中在另一个页面打开ppt、word
  6. 淘宝api接口大全(参数返回值说明)
  7. 我爱你,与你无关 【没有我的可怜人儿】
  8. sqlmap总出现missing a mandatory option的解决方法
  9. Android游戏开发:游戏框架的搭建(1)
  10. 程序员能力提升——7-2-1法则,让知识转化为职业竞争力