ComplexHeatmap热图专栏 | 6. 3D热图绘制教程

本期教程

原文链接https://mp.weixin.qq.com/s/EyBs6jn78zOomcTv1aP52g

6 3D热图的绘制教程

基于《热图绘制教程》专栏,本教程已更新了5个章节,不知道大家是否有所收获。对于小杜个人来说,真的需要不断的复习和练习才可以记住,但是在自己使用的时候也需要重复的看自己的学习笔记。这就是“为什么需要我们不断地练习”的原因吧。

《热图绘制教程》专栏我们通说更新发哦《生信知识库》中,你可以到知识库中查看和学习。

6.1 安装和加载所需的包

library(ComplexHeatmap)

6.2 加载所需数据

set.seed(123)
mat = matrix(rnorm(500), ncol = 10)
colnames(mat) = letters[1:10]
head(mat)
  a           b           c          d          e           f          g          h           i          j
[1,] -0.56047565  0.25331851 -0.71040656  0.7877388  2.1988103 -0.37560287 -0.7152422  1.0149432 -0.07355602  1.4304023
[2,] -0.23017749 -0.02854676  0.25688371  0.7690422  1.3124130 -0.56187636 -0.7526890 -1.9927485 -1.16865142  1.0466288
[3,]  1.55870831 -0.04287046 -0.24669188  0.3322026 -0.2651451 -0.34391723 -0.9385387 -0.4272793 -0.63474826  0.4352889
[4,]  0.07050839  1.36860228 -0.34754260 -1.0083766  0.5431941  0.09049665 -1.0525133  0.1166373 -0.02884155  0.7151784
[5,]  0.12928774 -0.22577099 -0.95161857 -0.1194526 -0.4143399  1.59850877 -0.4371595 -0.8932076  0.67069597  0.9171749
[6,]  1.71506499  1.51647060 -0.04502772 -0.2803953 -0.4762469 -0.08856511  0.3311792  0.3339029 -1.65054654 -2.6609228
  1. 绘制密度分布图
densityHeatmap(mat)

  1. 绘制密度直方图
frequencyHeatmap(mat)


为了进一步让热图呈现出3D,使用use_3d = TRUE进行修改参数

frequencyHeatmap(mat, use_3d = TRUE)

6.3 如何实现3D热图呢?

ComplexHeatmap文档中,也说给出的如何实现3D热图的实例及原理。我们作为初学者也可以简单的学习一下,我们这里说的是简单的学习不需要我们深入的学习。为什么呢?我们并不是作为开发者的角度,我们只是作为使用者。

  1. 简单的3D图形
bar3D(x = 0.5, y = 0.5, w = 0.2, h = 0.2, l = unit(1, "cm"), theta = 60)
  • x: x coordinate of the center point in the bottom face. Value should be a unit object. If it is numeric, the default unit is npc.
  • y: y coordinate of the center point in the bottom face.
  • w: Width of the bar (in the x direction). See the following figure.
  • h: Height of the bar (in the y direction). See the following figure.
  • l: Length of the bar (in the z direction). See the following figure.
  • theta: Angle for the projection. See the following figure. Note theta can only take value between 0 and 90.

简单的总结:就是设置长,宽,高以及角度的方向。

  1. 填充颜色
bar3D(x = seq(0.2, 0.8, length = 4), y = 0.5, w = unit(5, "mm"), h = unit(5, "mm"), l = unit(1, "cm"), fill = c("red", "green", "blue", "purple"))

6.4 Heatmap3D()函数使用

实例:

set.seed(7)
mat = matrix(runif(100), 10)
rownames(mat) = LETTERS[1:10]
colnames(mat) = letters[1:10]
Heatmap3D(mat, name = "mat", column_title = "This is a 3D heatmap")

mat = readRDS(system.file("extdata", "measles.rds", package = "ComplexHeatmap"))
year_text = as.numeric(colnames(mat))
year_text[year_text %% 10 != 0] = ""
ha_column = HeatmapAnnotation(year = anno_text(year_text, rot = 0, location = unit(1, "npc"), just = "top")
)
## 修改颜色
col_fun = circlize::colorRamp2(c(0, 800, 1000, 127000), c("white", "cornflowerblue", "yellow", "red"))
ht_opt$TITLE_PADDING = unit(c(15, 2), "mm")Heatmap3D(mat, name = "cases", col = col_fun,cluster_columns = FALSE, show_row_dend = FALSE, show_column_names = FALSE,row_names_side = "left", row_names_gp = gpar(fontsize = 8),column_title = 'Measles cases in US states 1930-2001\nVaccine introduced 1961',bottom_annotation = ha_column,heatmap_legend_param = list(at = c(0, 5e4, 1e5, 1.5e5), labels = c("0", "50k", "100k", "150k")),# new arguments for Heatmap3D()bar_rel_width = 1, bar_rel_height = 1, bar_max_length = unit(2, "cm")
)


6.5 补充

对于3D热图的绘制,Jokergoo也在评论区进行一个问题的补充说明

library(ComplexHeatmap)
library(circlize)m = matrix(1:36, nrow = 6, byrow = TRUE)
m = t(apply(m, 1, sample))Heatmap3D(m, cluster_rows = FALSE, cluster_columns = FALSE)

m2 = t(scale(t(m)))col_fun = colorRamp2(c(-1.5, 0, 1.5), c("blue", "white", "red"))Heatmap(m2, col = col_fun, rect_gp = gpar(type = "none"),layer_fun = function(j, i, x, y, w, h, f) {v = pindex(m, i, j)od = rank(order(-as.numeric(y), -as.numeric(x)))grid.rect(x[od], y[od], w[od], h[od], gp = gpar(col = "white",fill = "#EEEEEE"))bar3D(x[od], y[od], w[od] * 0.6, h[od] * 0.6, v[od]/max(m) * unit(1, "cm"),fill = f[od])}, cluster_rows = FALSE, cluster_columns = FALSE)

往期文章:

1. 复现SCI文章系列专栏

2. 《生信知识库订阅须知》,同步更新,易于搜索与管理。

3. 最全WGCNA教程(替换数据即可出全部结果与图形)

  • WGCNA分析 | 全流程分析代码 | 代码一

  • WGCNA分析 | 全流程分析代码 | 代码二

  • WGCNA分析 | 全流程代码分享 | 代码三

  • WGCNA分析 | 全流程分析代码 | 代码四

  • WGCNA分析 | 全流程分析代码 | 代码五(最新版本)


4. 精美图形绘制教程

  • 精美图形绘制教程

5. 转录组分析教程

转录组上游分析教程[零基础]

一个转录组上游分析流程 | Hisat2-Stringtie

小杜的生信筆記 ,主要发表或收录生物信息学的教程,以及基于R的分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!!

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

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

相关文章

RedHat9中安装Mysql8.0+出现“错误:GPG 检查失败“的处理

近期通过VM安装了RedHat9,之后在RedHat9中安装Mysql8.0的时候出现了个问题:“错误:GPG 检查失败”,如图所示: 解决方案:重新导入新的秘钥即可,如下所示: rpm --import https://rep…

Java面试整理(四)Java IO流

我记得自己刚开始学Java的时候,都听过师兄的分享,说IO流是很重要,而且很难。 自己正式接触之后,其实IO流这块知识并不是特别难,而且随着IT的发展,IO流这块反而用得不是很多。特别是在应用开发这个层面,用得更少。 当然,可能会有朋友跳出来说“这怎么可能?你不懂Java吧…

vr建筑虚拟实景展厅漫游体验更直观全面

随着科技的不断进步,纯三维、可交互、轻量化的三维线上展览云平台,打破时间界限,以其独特的魅力,给予客户更多的自主性、趣味性和真实性,客户哪怕在天南地北,通过网络、手机即可随时随地参观企业线上立体化…

软件测试中的分析与混沌理论

软件测试就像科学研究,需要在需求中找到一条通路。作为测试人员,我们揭示应用程序中固有的混乱,让代码更有序。 科学需要分析能力,软件测试也需要。分析思维对于个人及其组织的成长至关重要。分析性思考的人可以在问题发生之前就…

泳道图绘制全攻略,一图胜千言,快速上手

泳道图是一种流程图的形式,通过在不同的泳道中展示不同的参与者,帮助我们更好地理解和分析流程。它是一种非常有用的工具,可以帮助我们在团队协作、流程管理和问题解决等方面取得更好的效果。 1. 泳道图的定义 泳道图是一种以泳道为基础的流程…

浅析pyqt事件机制

pyqt事件机制 一、什么是pyqt事件机制? ​ 事件是指用户操作或系统发生的各种动作,比如鼠标点击、键盘输入、窗口大小变化等。事件可以由用户或操作系统触发,然后被传递给应用程序进行处理。PyQt的事件机制通过事件循环(Event L…

如何通过内网穿透实现无公网IP也能远程访问内网的宝塔面板

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔,内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具,适合新手,简单好用。当我们在家里/公司搭建了宝塔,没有公网IP,但是想要在外也可以访问内…

SVN修改已提交版本的日志方法

1.在工做中一直是使用svn进行項目的版本控制的,有时候因为提交匆忙,或是忘了添加Log,或是Log内容有错误。遇到此类状况,想要在查看项目的日志时添加log或是修改log内容,遇到以下错误: Repository has not b…

链表的应用

链表优点:链表各个节点个数可以灵活变动,学生多时可以增加节点,少时可以减少节点,链表不要求存储空间连续,空间利用率高 链表:链表中每个节点在内存中位置不一定连续,所以每一节点中一定有个字…

【EI会议征稿】第十届机电一体化与工业信息学国际学术研讨会(ISMII 2024)

第十届机电一体化与工业信息学国际学术研讨会(ISMII 2024) 2024 10th International Symposium on Mechatronics and Industrial Informatics 随着往年九届的成功举办,2024年第十届机电一体化与工业信息学国际学术研讨会(ISMII…

深入理解Flexbox:构建灵活的布局系统

由于篇幅限制,我将提供一个详细的文章大纲和部分内容。您可以根据这个大纲扩展文章内容,以满足3000字的要求。 深入理解Flexbox:构建灵活的布局系统 引言 在现代web设计中,创建灵活且响应式的布局是非常重要的。Flexbox&#xf…

如何在Go中编写Switch语句

引言 [条件语句]让程序员能够指挥程序在条件为真时采取某种行动,在条件为假时采取另一种行动。通常,我们希望将一些[变量]与多个可能的值进行比较,在每种情况下采取不同的操作。单独使用[if语句]也可以做到这一点。然而,编写软件不仅是让事情正常运行,而且还要将你的意图…

Google DeepMind推出大模型 Gemini (vs GPT4):规模最大、能力最强的人工智能模型

系列文章目录 文章目录 系列文章目录前言谷歌和 Alphabet 首席执行官桑达尔-皮查伊(Sundar Pichai)的说明一、Gemini 介绍二 、最先进的性能三、新一代功能四、复杂的推理能力五、理解文本、图像、音频及其他内容六、先进的编码技术七、更可靠、可扩展、…

推荐一个可以记录历史进价的进销存软件?

“我是卖数码产品的,数码产品价格变动是比较大的,每次采购时候我都会多家对比价格,再决定在哪个厂家进货。所以基本上我每次进价价格都不一样,但是之前的询价情况又很难一一单独记录,让我采购的时候很被动。” “准备…

java--枚举

1.枚举 枚举是一种特殊类 2.枚举类的格式 注意: ①枚举类中的第一行,只能写一些合法的标识符(名称),多个名称用逗号隔开。 ②这些名称,本质是常量,每个常量都会记住枚举类的一个对象。 3.枚举类的特点 ①枚举类的…

预测:2024年的安防监控行业将迎来怎样的变化?

随着科技的飞速发展,安防监控视频技术已经成为我们生活中的重要部分。通过对其发展趋势的深入了解,我们可以对未来做出更为精确的预测。本文将探讨2024年安防监控视频技术的可能发展趋势。 1、5G技术的普及将加速安防视频监控技术的发展 5G的高速率、低…

背包问题学习

背包问题是常见的动态规划dp的问题 下面用到的符号: 常用n表示物品数, m表示背包容积f[i][j]表示i件物品, j的背包容量的最大价值w[i]表示第i件物品的价值, v[i] 表示第i件物品的容量f[0][0~m] 0, 所以n可以从1开始遍历一般是有两层嵌套循环 第一层遍历物品, 第二层遍历背包…

什么是HTTPS加密协议?一篇文章带你走进HTTPS的世界

什么是HTTPS加密协议?一篇文章带你走进HTTPS的世界 大家好,我是微赚淘客系统的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我将带大家了解一个在互联网安全领域非常重要的概念——HTTPS加密协议。让我们一起走进…

模板错误:主模板的声明中不允许使用模板参数列表

没有主模板&#xff0c;所以编译报错 #include "killCmake.h"#include<string>using namespace std;template<typename T> class Point<char*, T> // 编译&#xff0c;报错error:主模板的声明中不允许使用模板参数列表 { public:Point(char* x, T…

PHP使用HTTP代码示例模板

PHP是一种广泛用于服务器端的编程语言&#xff0c;它提供了许多内置的函数和扩展&#xff0c;以便开发人员能够轻松地处理HTTP请求和响应。在PHP中&#xff0c;您可以使用以下代码示例模板来处理HTTP请求和生成HTTP响应。 php复制代码 <?php // 处理GET请求 if ($…