ComplexHeatmap绘图:注释、图例、热图基础(自备)

目录

基础介绍

 Heatmap绘图基础参数

数据

作图参数

Heatmap Annotations(注释)

基础注释设置

简单注释测试

anno_points散点注释

anno_lines连线注释

anno_barplot条形图

anno_boxplot箱线图

anno_histogram直方图

热图组合

基础组合

进行调整(水平串联)

垂直串联(使用%v%连接)


ComplexHeatmap中文版说明 (pengpengyang94.github.io)

学习ComplexHeatmap复杂热图_complexheatmap km-CSDN博客

ComplexHeatmap绘制热图并进行个性化标注_complexheatmap图例修改-CSDN博客

基础介绍

主要是热图+注释+图例的组合。熟悉这几个基础技能完成各种组合。

单个热图由热图主体和各种热图组件组成(图 1A)。热图主体是具有单个颜色格子的二维排列,其中每个格子对应于输入矩阵中的一个特定值。热图组件包含标题、系统树图(dendrogram)、矩阵行和列的文字标签以及热图注释。这些组件可以放置在热图主体的四个侧面,每个组件都由为Heatmap对象定义的特定方法所管理。此外,热图主体可以在行和列上进行切分。

热图注释包含与热图的行或列相关的附加信息。ComplexHeatmap 为设置不同的注释图形和定义新的注释图形提供了丰富的支持。热图注释可以作为热图的组件放在其四个侧面,也可以独立和热图连接。HeatmapAnnotation 对象包含一组由 SingleAnnotation 类定义的单个注释(图 1B),其中每个单独注释都包含一种特定类型的图形,该图形由 AnnotationFunction 类进一步定义。AnnotationFunction 类提供了一种灵活的方式来定义新的注释图形,更重要的是,自定义的注释图形可以根据主热图而进行自动重新排序和切分。

ComplexHeatmap 的主要特点是它支持水平或垂直连接一组热图和注释,以便于可视化不同数据源之间的关联。HeatmapList 类是一组热图和注释的容器(图 1C),它会自动调整多个热图和注释中行或列的对应关系。


 Heatmap绘图基础参数
数据
rm(list = ls()) 
library(ComplexHeatmap)
library(circlize)
##数据模拟##
set.seed(123)
nr1 = 4; nr2 = 8; nr3 = 6; nr = nr1 + nr2 + nr3
nc1 = 6; nc2 = 8; nc3 = 10; nc = nc1 + nc2 + nc3
mat = cbind(rbind(matrix(rnorm(nr1*nc1, mean = 1,   sd = 0.5), nr = nr1),matrix(rnorm(nr2*nc1, mean = 0,   sd = 0.5), nr = nr2),matrix(rnorm(nr3*nc1, mean = 0,   sd = 0.5), nr = nr3)),rbind(matrix(rnorm(nr1*nc2, mean = 0,   sd = 0.5), nr = nr1),matrix(rnorm(nr2*nc2, mean = 1,   sd = 0.5), nr = nr2),matrix(rnorm(nr3*nc2, mean = 0,   sd = 0.5), nr = nr3)),rbind(matrix(rnorm(nr1*nc3, mean = 0.5, sd = 0.5), nr = nr1),matrix(rnorm(nr2*nc3, mean = 0.5, sd = 0.5), nr = nr2),matrix(rnorm(nr3*nc3, mean = 1,   sd = 0.5), nr = nr3))
)
mat = mat[sample(nr, nr), sample(nc, nc)] # random shuffle rows and columns
rownames(mat) = paste0("row", seq_len(nr))
colnames(mat) = paste0("column", seq_len(nc))

作图参数
#颜色设置#
col_fun = colorRamp2(c(-2, 0, 2),#范围c("green", "white", "red"))
col_fun(seq(-3, 3))#ht_opt$TITLE_PADDING = unit(c(8.5, 8.5), "points")#用于画板大小设置
p <- Heatmap(mat, name = "图例", #图例名称col = col_fun, #颜色设置 column_title = "column_title",   ##列标题#column_title_gp = gpar(fontsize = 16, fontface = "bold"),##列标题格式设置column_title_gp = gpar(fill = "red",                      ##将标题设置方块填充颜色col = "white",                     ##字体颜色border = "blue",                   ##边界颜色fontsize = 16,                     ##字体大小fontface = "bold"),row_title = "I am a row title",  ##行标题row_title_rot = 0,               ##行标题旋转(只能垂直和水平)na_col = "black",                #NA值颜色设置(如果dataframe里含有NA值)border_gp = gpar(col = "black", lty = 2), ##整个边界线设置rect_gp = gpar(col = "white", lwd = 2),    ##热图矩阵线设置cluster_rows = T,                       ##侧面的行聚类树显示设置 FALSE不显示show_column_dend = T,                   ##上面的列聚类树显示设置row_dend_side = "left",                 #行聚类树位置right leftcolumn_dend_side = "top",                #列聚类树位置top  bottomrow_names_side = "left",                 ##行名位置设置row_names_gp = gpar(fontsize = 10,       ##行名大小及颜色设置col = c(rep("red", 10), rep("blue", 8))),        column_names_side = "bottom",                ##列名位置设置column_names_rot = 45,                     ##列名旋转设置row_km = 2,                                ##行切割column_km = 3                             ##列切割  或者直接设置位置column_split = 2)p
dev.off()

ComplexHeatmap绘制热图并进行个性化标注_complexheatmap图例修改-CSDN博客


Heatmap Annotations(注释)
基础注释设置
dev.off()
rm(list = ls()) 
library(ComplexHeatmap)
library(circlize)
set.seed(123)
mat = matrix(rnorm(100), 10)
rownames(mat) = paste0("R", 1:10)
colnames(mat) = paste0("C", 1:10)
head(mat)C1         C2         C3         C4         C5          C6
R1 -0.56047565  1.2240818 -1.0678237  0.4264642 -0.6947070  0.25331851
R2 -0.23017749  0.3598138 -0.2179749 -0.2950715 -0.2079173 -0.02854676
##列的注释:生成随机的1:10数值,然后制作色块和棒状图
column_ha = HeatmapAnnotation(foo1 = runif(10),bar1 = anno_barplot(runif(10)))
##行的注释
row_ha = rowAnnotation(foo2 = runif(10), bar2 = anno_barplot(runif(10)))
Heatmap(mat, name = "mat", top_annotation = column_ha, right_annotation = row_ha)

简单注释测试
##创建一个新页面用于绘图测试##
grid.newpage()
pushViewport(viewport(y = 0.7, height = 0.6, width = 0.8))
#颜色设置
col_fun = colorRamp2(c(0, 5, 10), c("blue", "white", "red"))#未指定颜色会生成随机颜色
ha = HeatmapAnnotation(foo = 1:10, col = list(foo = col_fun))
draw(ha)
dev.off()

单个注释和数据框可以混合使用

grid.newpage()
pushViewport(viewport(y = 0.7, height = 0.6, width = 0.8))
#颜色设置
col_fun = colorRamp2(c(0, 5, 10), c("blue", "white", "red"))#未指定颜色会生成随机颜色
ha = HeatmapAnnotation(df = anno_df,foo2 = rnorm(10),col = list(foo = col_fun,bar = c("a" = "red", "b" = "green", "c" = "blue"))
)
draw(ha)
dev.off()

注释可以为多种形式

anno_points散点注释
grid.newpage()
pushViewport(viewport(y = 0.7, height = 0.6, width = 0.8))
ha = HeatmapAnnotation(foo = anno_points(runif(10)))
draw(ha)
dev.off()

anno_lines连线注释
grid.newpage()
pushViewport(viewport(y = 0.7, height = 0.6, width = 0.8))
ha = HeatmapAnnotation(foo = anno_lines(runif(10)))
draw(ha)
dev.off()

anno_barplot条形图
grid.newpage()
pushViewport(viewport(y = 0.7, height = 0.6, width = 0.8))
ha = HeatmapAnnotation(foo = anno_barplot(1:10))
draw(ha)
dev.off()

ha = HeatmapAnnotation(foo = anno_barplot(1:10, bar_width = 1))#修改宽度

ha = HeatmapAnnotation(foo = anno_barplot(1:10, gp = gpar(fill = 1:10)))#颜色填充

ha = HeatmapAnnotation(foo = anno_barplot(seq(-5, 5), baseline = 0))#基线设置

还可以进行堆砌图和翻转

anno_boxplot箱线图
grid.newpage()
pushViewport(viewport(y = 0.7, height = 0.6, width = 0.8))
set.seed(12345)
m = matrix(rnorm(100), 10)
ha = HeatmapAnnotation(foo = anno_boxplot(m, height = unit(4, "cm")))
draw(ha)
dev.off()

anno_histogram直方图
grid.newpage()
pushViewport(viewport(y = 0.7, height = 0.6, width = 0.8))
m = matrix(rnorm(1000), nc = 100)
ha = rowAnnotation(foo = anno_histogram(m)) # apply `m` on rows
draw(ha)
dev.off()

还有水平注解文本注解等功能第 3 章 热图注释 |ComplexHeatmap 完整参考 (jokergoo.github.io)


热图组合
基础组合
rm(list = ls()) 
library(ComplexHeatmap)
library(circlize)set.seed(123)#生成矩阵数据1
mat1 = matrix(rnorm(80, 2), 8, 10)
mat1 = rbind(mat1, matrix(rnorm(40, -2), 4, 10))
rownames(mat1) = paste0("R", 1:12)
colnames(mat1) = paste0("C", 1:10)
##生成矩阵数据2
mat2 = matrix(runif(60, max = 3, min = 1), 6, 10)
mat2 = rbind(mat2, matrix(runif(60, max = 2, min = 0), 6, 10))
rownames(mat2) = paste0("R", 1:12)
colnames(mat2) = paste0("C", 1:10)le = sample(letters[1:3],      #随机字母A B C 12, replace = TRUE)#生成一个1:12的随机向量
names(le) = paste0("R", 1:12)ind = sample(12, 12)#随机提取12个样本
mat1 = mat1[ind, ]
mat2 = mat2[ind, ]
le = le[ind]

进行组合

#绘制热图
ht1 = Heatmap(mat1, name = "rnorm")
ht2 = Heatmap(mat2, name = "runif")
ht3 = Heatmap(le, name = "letters")
#进行组合
ht1 + ht2 + ht3dev.off()

在默认模式下,将删除第二个热图中的树状图,并 行顺序将与第一个行顺序相同。还有前两个的行名 热图也会被删除。

进行调整(水平串联)
col_rnorm = colorRamp2(c(-3, 0, 3), c("green", "white", "red"))
col_runif = colorRamp2(c(0, 3), c("white", "orange"))
col_letters = c("a" = "pink", "b" = "purple", "c" = "blue")
ht1 = Heatmap(mat1, name = "rnorm", col = col_rnorm,row_title = "Heatmap 1", column_title = "Heatmap 1")
ht2 = Heatmap(mat2, name = "runif", col = col_runif,row_title = "Heatmap 2", column_title = "Heatmap 2")
ht3 = Heatmap(le, name = "letters", col = col_letters)
ht_list = ht1 + ht2 + ht3draw(ht_list,  ##绘图,然后添加细节row_title = "Three heatmaps, row title", row_title_gp = gpar(col = "red"),column_title = "Three heatmaps, column title", column_title_gp = gpar(fontsize = 16))

还可以进行大小设置

dev.off()
ht1 = Heatmap(mat1, name = "rnorm", col = col_rnorm, width = unit(4, "cm"))
ht2 = Heatmap(mat2, name = "runif", col = col_runif, width = unit(6, "cm"))
ht3 = Heatmap(le, name = "letters", col = col_letters, width = unit(1, "cm"))
ht1 + ht2 + ht3

垂直串联(使用%v%连接)

数据一样的

rm(list = ls()) 
library(ComplexHeatmap)
library(circlize)set.seed(123)#生成矩阵数据1
mat1 = matrix(rnorm(80, 2), 8, 10)
mat1 = rbind(mat1, matrix(rnorm(40, -2), 4, 10))
rownames(mat1) = paste0("R", 1:12)
colnames(mat1) = paste0("C", 1:10)
##生成矩阵数据2
mat2 = matrix(runif(60, max = 3, min = 1), 6, 10)
mat2 = rbind(mat2, matrix(runif(60, max = 2, min = 0), 6, 10))
rownames(mat2) = paste0("R", 1:12)
colnames(mat2) = paste0("C", 1:10)le = sample(letters[1:3],      #随机字母A B C 12, replace = TRUE)#生成一个1:12的随机向量
names(le) = paste0("R", 1:12)ind = sample(12, 12)#随机提取12个样本
mat1 = mat1[ind, ]
mat2 = mat2[ind, ]
le = le[ind]
#颜色设置
col_rnorm = colorRamp2(c(-3, 0, 3), c("green", "white", "red"))
col_runif = colorRamp2(c(0, 3), c("white", "orange"))
col_letters = c("a" = "pink", "b" = "purple", "c" = "blue")##垂直串联
mat1t = t(mat1)
mat2t = t(mat2)
ht1 = Heatmap(mat1t, name = "rnorm", col = col_rnorm, row_title = "rnorm")
ht2 = Heatmap(mat2t, name = "runif", col = col_runif, row_title = "runif")
ht3 = Heatmap(rbind(letters = le), name = "letters", col = col_letters)
ht_list = ht1 %v% ht2 %v% ht3
draw(ht_list)

第五章 传奇 |ComplexHeatmap 完整参考 (jokergoo.github.io)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/790415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【热门话题】文言一心与ChatGPT-4:一场跨时代智能对话系统的深度比较

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 文言一心与ChatGPT-4&#xff1a;一场跨时代智能对话系统的深度比较一、技术背景…

Maven--lib分离的打包方式

就是把lib包和source源码分开打包。优势就是&#xff0c;面对频繁更新的应用场景时&#xff0c;可以只更新源码包&#xff08;当然&#xff0c;前提是你的依赖没有增减&#xff09;。尤其是使用jenkins更新项目时&#xff0c;会省去很多时间吧&#xff1f; 不同项目的 lib之间不…

SQL语句生成器,支持MSSQL/MYSQL/SQLITE/ACCESS/EXCEL

经过7个月的艰苦开发&#xff0c;SQL语句生成器终于和各位见面了&#xff0c;因为工程量浩大&#xff0c;一度做到崩溃&#xff0c;差点烂尾&#xff0c;好在经过N次激烈思想斗争后还是坚持了下来累累累累累累累 本软件能够自动生成SQL语句及对应的易语言代码&#xff0c;还有相…

图片二维码如何制作生成?常规图片格式的二维码制作技巧

图片是展示信息很常用的一种方式&#xff0c;而现在查看图片很多人会通过二维码的形式来展现&#xff0c;这种方式优势在于更加的灵活&#xff0c;能够通过一个二维码展示大量的图片内容。那么图片二维码是如何制作生成的呢&#xff1f; 想要快速的将图片转二维码使用&#xf…

mapbox-gl扩展sprites图片

在mapbox-gl.js中&#xff0c;通过在styles中设置sprite和glyphs&#xff0c;实现样式图标和字体的加载。而一旦style加载完成&#xff0c;如果重置地图中的style&#xff0c;则会导致地图全部重新加载&#xff0c;图层的顺序&#xff0c;地图上的要素&#xff0c;都会丢失&…

智慧城市治理:构建全域覆盖的城市时空感知体系

TSINGSEE青犀AI算法中台是一款平台型产品&#xff0c;专注于提供各行业中小场景部署解决方案。平台具备接入广、性能强、支持跨平台、芯片国产化等特点&#xff0c;可提供丰富的视图接入能力和智能分析能力。 平台采用了多项IT高新技术&#xff0c;包括视频编解码技术、嵌入式…

成都直播基地出租:天府新区兴隆湖天府锋巢直播产业基地

天府新区兴隆湖天府锋巢直播产业基地&#xff0c;作为成都乃至西部地区的一颗璀璨明珠&#xff0c;正以其独特的魅力和无限的潜力&#xff0c;吸引着越来越多的目光。这里不仅是成都直播产业的聚集地&#xff0c;更是传统企业转型升级的摇篮&#xff0c;是新媒体时代下的创新高…

多态--下

文章目录 概念多态如何实现的指向谁调谁&#xff1f;例子分析 含有虚函数类的大小是多少&#xff1f;虚函数地址虚表地址多继承的子类的大小怎么计算&#xff1f;练习题虚函数和虚继承 概念 优先使用组合、而不是继承; 继承会破坏父类的封装、因为子类也可以调用到父类的函数;…

RESTful规范总结

概念&#xff1a;RESTful&#xff08;Representational State Transfer 的缩写&#xff09;是一种广泛使用的API架构风格。 1.资源&#xff1a;在REST API的设计中&#xff0c;首先需要面向资源建模&#xff0c;其中每个节点是是一个简单资源或集合资源。 1.1一个集合包含相同…

基于Uni-app的体育场馆预约系统的设计与实现

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

如何操作RAID 0阵列的扩容?

正文共&#xff1a;1888 字 23 图&#xff0c;预估阅读时间&#xff1a;2 分钟 RAID&#xff08;Redundant Array of Independent Disks&#xff09;即独立磁盘冗余阵列&#xff0c;通常简称为磁盘阵列&#xff0c;在高级磁盘阵列中&#xff0c;部分物理存储空间会用来记录保存…

【性能调优】Java服务端性能优化与实战

一、背景 降本增效&#xff1a;随着公司业务的发展和用户规模的增加&#xff0c;当前服务的QPS已经远远不能满足业务需求&#xff0c;需要申请更多CPU资源&#xff0c;来提升QPS&#xff0c;满足业务发展&#xff0c;但是公司硬件资源有限&#xff0c;额外申请多余资源&#x…

OpenHarmony实战:小型系统器件驱动移植

本章节讲解如何移植各类器件驱动。 LCD驱动移植 移植LCD驱动的主要工作是编写一个驱动&#xff0c;在驱动中生成模型的实例&#xff0c;并完成注册。 这些LCD的驱动被放置在源码目录//drivers/hdf_core/framework/model/display/driver/panel中。 创建Panel驱动 创建HDF驱动…

vulnhub pWnOS v2.0通关

知识点总结&#xff1a; 1.通过模块来寻找漏洞 2.msf查找漏洞 3.通过网站源代码&#xff0c;查看模块信息 环境准备 攻击机&#xff1a;kali2023 靶机&#xff1a;pWnOS v2.0 安装地址&#xff1a;pWnOS: 2.0 (Pre-Release) ~ VulnHub 在安装网址中看到&#xff0c;该靶…

day10 java封装性

封装性 为什么有封装性&#xff1f; 为了保护数据不被随意修改&#xff0c;隐藏类的实现细节。增强了代码的安全性和可维护性。 该隐藏隐藏 该暴露暴露 封装性的实现&#xff1f; 让调用者只能通过方法操作属性。可以在方法中加入一些限制条件或数据检查的操作。 封装性的直…

计算机服务器中了helper勒索病毒怎么办,helper勒索病毒解密流程步骤

随着网络技术在企业中的不断应用&#xff0c;越来越多的企业离不开网络&#xff0c;网络为企业提供了极大便利&#xff0c;大大提升了生产运营效率&#xff0c;由此而产生的网络数据安全问题也成为了企业关心的主要话题。近期&#xff0c;云天数据恢复中心接到多家企业的求助&a…

jQuery(二)

文章目录 1.jQuery操作节点1.查找节点&#xff0c;修改属性1.基本介绍2.切换图片案例 2.创建节点1.基本介绍2.内部插入3.外部插入4.小结1.插入方法说明2.两种插入方法的区别 5.插入元素实例6.移动元素实例 3.删除节点1.基本介绍2.代码实例 4.复制节点1.基本介绍2.代码实例 5.替…

文心一言 VS 讯飞星火 VS chatgpt (227)-- 算法导论16.3 9题

九、证明&#xff1a;对于一个由随机生成的8位字符组成的文件&#xff0c;没有任何压缩方法可以望将其压缩、哪怕只是压缩一位。(提示&#xff1a;比较可能的文件数量和可能的编码文件数量。) 文心一言&#xff1a; 确实&#xff0c;对于一个由随机生成的8位字符组成的文件&a…

【动态】江西省小型水库安全监测能力提升试点项目通过验收

近日&#xff0c;由北京国信华源科技有限公司和长江勘测规划设计研究有限责任公司联合承建的江西省小型水库安全监测能力提升试点项目圆满通过验收。 在项目业主单位的组织下&#xff0c;省项目部、特邀专家、县水利局二级项目部以及项目设计、监理、承建等单位的代表组成验收工…

GLM论文研读

一、原文链接 论文&#xff1a;https://arxiv.org/pdf/2103.10360.pdf 二、原文翻译 摘要&#xff1a; 目前已经发展出多种预训练模型&#xff0c;包括自编码模型&#xff08;如BERT&#xff09;、自回归模型&#xff08;如GPT&#xff09;和编码器-解码器模型&#xff08;…