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 left
        column_dend_side = "top",                #列聚类树位置top  bottom
        row_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 + ht3

dev.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 + ht3

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用idea一次性删除java文件中所有的注释内容 /* */

将.class文件转成.java文件后&#xff0c;.java文件每行都会生成注释/* */&#xff0c;下面是通过idea的替换功能&#xff0c;使用正则表达式删除注释/* */。 我使用MacBook&#xff0c;commandR打开替换查找替换界面&#xff0c;第一步选中 .* &#xff0c;第二步在…

虚拟机与开发板之间互传文件、文件夹

1.配置桥接模式实现外网访问 1.1设置 VMnet0 要桥接的网卡 打开【编辑】-【虚拟网络编辑器】 选择【更改设置】 选择【VMnet0】&#xff0c;选择桥接到宿主机上的哪个网卡。 通过打开安装虚拟机的宿主机的【网络适配器】&#xff0c;可以查看网卡名称。 1.2虚拟机配置桥接模式…

Idea2023创建Servlet项目

① Java EE 只是一个抽象的规范&#xff0c;具体实现称为应用服务器。 ② Java EE 只需要两个包 jsp-api.jar 和 servlet-api.jar&#xff0c;而这两个包是没有官方版本的。也就是说&#xff0c;Java 没有提供这两个包&#xff0c;只提供了一个规范。那么这两个包是谁提供的…

Java23种常见设计模式汇总

七大原则网站地址&#xff1a;设计模式7大原则&#xff0b;类图关系-CSDN博客 创建型设计模式&#xff1a;创建型设计模式合集-CSDN博客 七大结构型设计模式&#xff1a;7大结构型设计模式-CSDN博客 11种行为型设计模式&#xff1a; 11种行为型模式&#xff08;上&#xff0…

Xmind安装在指定目录

场景&#xff1a; Xmind安装默认是安装C盘。 问题描述 一般用户都习惯将软件安装在其他盘&#xff0c;但是Xmind不支持安装的时候指定磁盘或目录。 解决方案&#xff1a; 1、在D盘创建一个文件夹&#xff0c;用于安装Xmind&#xff0c;比如创建一个D:\Program Files (x86)…

MyBatis动态SQL--if 标签

mybatis动态sql对我们来说是非常常见的&#xff0c;比如在下面这样一个场景中&#xff0c; 我们需要多条件查询&#xff0c;但是查询的条件又不是固定的&#xff0c;是可以动态改变的&#xff0c;那我们就需要用到动态sql去完成。 动态SQL之 if 标签 接下来我们介绍第一个动态…

【Java代码审计】S2-045 远程代码执行漏洞分析复现

【Java代码审计】S2-045 远程代码执行漏洞分析复现 1.漏洞原理2.靶场复现 1.漏洞原理 官方对该漏洞的描述是这样的&#xff1a;Struts2 默认处理 multipart 上传报文的解析器为 Jakarta 插件&#xff08;org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest类&a…

基于opencv的SVM算法的车牌识别系统设计与实现

基于opencv的SVM算法的车牌识别系统设计与实现 车牌识别技术是智能交通系统中的一项关键技术&#xff0c;它能够自动识别车辆的车牌号码。本文将详细介绍如何使用Python编程语言结合OpenCV库和SVM算法来实现车牌识别系统。 系统架构 车牌识别系统主要包括以下几个模块&…

外贸建站:WordPress搭建外贸独立站零基础自建站完整教程(2024)

对于做外贸来说&#xff0c;拥有自己的外贸独立网站真的非常重要。在外贸领域&#xff0c;如今各平台竞争激烈&#xff0c;规则多&#xff0c;成本高&#xff0c;价格战、政策变化快&#xff0c;还存在封店风险等等因素。在这种情况下&#xff0c;拥有外贸独立站就能很好规避上…

JavaSE:抽象类和接口

目录 一、前言 二、抽象类 &#xff08;一&#xff09;抽象类概念 &#xff08;二&#xff09;使用抽象类的注意事项 &#xff08;三&#xff09;抽象类的作用 三、接口 &#xff08;一&#xff09;接口概念 &#xff08;二&#xff09;接口语法规则 &#xff08;三&a…

八口快速以太网交换机芯片方案分享/JL5110

以太网交换机(switch)是一种网络设备&#xff0c;用于在局域网中连接多个计算机和其他网络设备。它可以实现多个端口之间的同时传输&#xff0c;并根据MAC地址进行帧过滤和转发。交换机通过自学习的方式&#xff0c;将MAC地址与相应的接口关联起来&#xff0c;以便将数据帧准确…

Termius for Mac v8.4.0激活版下载

Termius for Mac是一款功能强大的多协议远程管理软件&#xff0c;专为开发人员、系统管理员和网络专业人士设计。它支持多种远程连接协议&#xff0c;如SSH、Telnet、RDP、VNC和RFB等&#xff0c;使得用户可以轻松连接到不同类型的远程服务器和设备。 软件下载&#xff1a;Term…

湖北兴发MES和用友NCC单据接口对接

湖北兴发MES和用友NCC单据接口对接 对接系统用友NCC 用友NCCloud&#xff0c;为客户提供面向大型企业集团、制造业、消费品、建筑、房地产、金融保险等14个行业大类&#xff0c;68个细分行业&#xff0c;涵盖数字营销、智能制造、财务共享、数字采购等18大解决方案&#xff0c;…

为什么要用能量回馈式负载

能量回馈式负载是一种能够将电能转化为其他形式能量的装置&#xff0c;同时还能将其他形式的能量转化为电能。这种负载在许多应用中具有重要的意义&#xff0c;因为它可以提高能源利用效率&#xff0c;减少能源浪费&#xff0c;降低环境污染&#xff0c;提高系统的稳定性和可靠…

Python3.10 - 列表的常用方法

01 列表的切片 lst [a, b, 1, 2, [c1, 1]]# 01 列表的切片 lst1 lst[0:2] # 从0开始切到1(顾头不顾尾), 切得长度超过1时, 切出来为list类型 print(lst1, type(lst1))lst2 lst[0] # 从中切某个元素时, 切出来的类型即元素本身, 以下同理 print(lst2, type(lst2))lst3 ls…

“由于找不到opencv_world3413.dll,无法继续执行代码”的解决方法

问题 在Windows系统中&#xff0c;编译完涉及到opencv的项目后&#xff0c;提示&#xff0c; 由于找不到opencv_world3413.dll&#xff0c;无法继续执行代码 解决方法 在编译好的opencv的bin文件内&#xff08;如&#xff1a;D:\code\vs2017\opencv\build\x64\vc15\bin&…

Spring Boot 学习(2)——HelloWorld

HelloWorld&#xff01;全宇宙码农的第一个&#xff08;行&#xff09;程序&#xff08;代码&#xff09;。 1、创建项目 打开idea&#xff0c;新建一个maven项目。 1&#xff09;选择项目sdk&#xff08;本例是1.8&#xff09; 2&#xff09;输入GroupId&#xff08;co…

FME学习之旅---day20

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 教程&#xff1a;AutoCAD 入门 FME使用四种主要格式来读取和写入AutoCAD图形文件;初级教程重点介绍AutoDesk AutoCAD DWG\DXF(ACAD) AutoCAD中常用的术语 实体&#xff1a;AutoCAD 图元表示 D…

超强命令行解析工具Apache Commons CLI

概述 为什么要写这篇文章呢?因为在读flink cdc3.0源码的时候发现了这个工具包,感觉很牛,之前写过shell命令,shell是用getopts来处理命令行参数的,但是其实写起来很麻烦,长时间不写已经完全忘记了,现在才发现原来java也有这种工具类,所以先学习一下这个的使用,也许之后自己在写…

封装一个vue3的公共组件

在Vue 3中&#xff0c;封装公共组件的场景包括但不限于以下几种情况&#xff1a; 重复使用的组件&#xff1a;如果你发现某个组件在多个地方重复使用&#xff0c;那么将其封装成公共组件是很有意义的。比如&#xff0c;页面中的各种表单控件&#xff08;输入框、下拉框、日期选…