起因

ComplexHeatmap包有一个densityHeatmap()函数用来对一组分布进行可视化。例如下面的例子:

library(ComplexHeatmap)
set.seed(123)
mat = matrix(rnorm(500), ncol = 10)
colnames(mat) = letters[1:10]
densityHeatmap(mat)

在R图形系统中,我们也可以使用histogram来可视化分布,因此从ComplexHeatmap版本2.7.9开始,我新加了一个函数frequencyHeatmap(),就像是一个histogram版本的density heatmap。其用法和densityHeatmap()非常类似:

frequencyHeatmap(mat)

在这里,区间中的频度使用热图进行可视化。

那么现在,频度热图被称作是密度热图的histogram版本,但这看起来一点都不像histogram。那么可能一个3D的热图在这里更加适合。这可以通过在frequencyHeatmap()中设置参数use_3d = TRUE来将2D热图转换为3D热图:

frequencyHeatmap(mat, use_3d = TRUE)

这看起来好多了!下面一节我将会介绍如何在ComplexHeatmap包中集成3D热图功能的。

3D热图的实现

首先,我们要能画3D的柱子,这可以通过新函数bar3D()实现。用法如下:

bar3D(x = 0.5, y = 0.5, w = 0.2, h = 0.2, l = unit(1, "cm"), theta = 60)

其中各个参数的意义不言而喻,见下图:

bar3D()中,fill参数控制柱子的颜色。为了增强3D效果,柱子的三个面的颜色有略微轻微不同的明亮度。

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"))

参数theta控制投影的角度,见下例:

bar3D(x = seq(0.2, 0.8, length = 4), y = 0.5, w = unit(5, "mm"), h = unit(5, "mm"), l = unit(1, "cm"), theta = c(20, 40, 60, 80))

好了,现在既然我们已经能够画3D的柱子了,为了实现3D的热图,我们可以通过cell_fun或者layer_fun提供的自定义函数来将每一个3D柱子放置在热图的格子上,其中柱子的高度和热图中相应的值对应。这里我写了一个新函数Heatmap3D()可以直接拿来使用。其用法和Heatmap()几乎完全相同。见下面的例子:

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")

当位于热图边缘的柱子太高时,可能会和热图中其他元件重叠,那么这时候需要进行手动的微调。在上面的例子中,标题和legend和3D柱子有重叠,这可以通过手动设置ht_opt$HEATMAP_LEGEND_PADDINGht_opt$TITLE_PADDING来进行调整:

ht_opt$HEATMAP_LEGEND_PADDING = unit(5, "mm")
ht_opt$TITLE_PADDING = unit(c(9, 2), "mm") # bottom and top padding
Heatmap3D(mat, name = "mat", column_title = "This is a 3D heatmap")

看,现在看起来好多了。

下面一个例子是对一个麻疹疫苗数据集的可视化,第一张图是2D热图,第二张图是3D热图。源代码可以通过点击“阅读全文”获得。

最后,InteractiveComplexHeatmap包可以将任何通过ComplexHeatmap生成的热图转变为一个Shiny app,那么Heatmap3D()生成的热图也同样可以。只需要在热图生成后运行htShiny()即可:

往期精品(点击图片直达文字对应教程)

机器学习

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

使用ComplexHeatmap绘制3D热图相关推荐

  1. 使用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 热 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. Seaborn系列| 绘制相关性热图(仅显示下三角相关性)

    目录 seaborn简介 下载安装 实例 1.导入包 2.导入数据 3. 计算相关性 4. 设置颜色 5. 定义一个与相关性矩阵大小相同的矩阵,用于仅显示下三角内容,如需要显示整个矩阵则不需要如此设置 ...

最新文章

  1. P2657 [SCOI2009]windy数 数位dp入门
  2. C++多态的概念及前提条件
  3. g标签 怎么设置svg_SVG(可缩放矢量图形)图片添加、高斯模糊、渐变与g标签
  4. vue响应的res.data和res.data.data
  5. PHP操作mongoDB:conn crud
  6. 微信小程序字符串与对象相互转换
  7. MYSQL重置ROOT密码
  8. C# WinForm 自启动/模拟开机自动启动
  9. 遇到异常:这可能是由某个扩展导致的
  10. 今天的但我发现了幸福的超级玛丽,白萝卜的种子
  11. docker之es+es-head+kibana+ik分词器安装
  12. 聊城市计算机专业,聊城市关于2018年下半年计算机技术与软件专业技术资格(水平)考试考务工作有关问题的通知...
  13. jQuery里如何使用ajax发送请求
  14. terminal显示mysql_mac如何在terminal终端中操作mysql
  15. 五连阳回调买入法_一旦出现“4连阳+1阴”形态,坚定满仓买入,百分百是主升浪...
  16. matlab进行mppt控制仿真,光伏发电系统MPPT控制仿真模型
  17. win11怎么关闭触控板?win11关闭触控板的三种解决方法
  18. 使用新浪API生成短连接
  19. 排序学习-必读论文-AMiner
  20. wifi发射功率查看和设置

热门文章

  1. 刘良华(1969-),男,宁波市智慧城市规划标准发展研究院研究室副主任.
  2. 【2015年第4期】大数据引领教育未来:从成绩预测谈起
  3. C++——《算法分析》实验叁——贪心算法与回溯法
  4. 根据特殊EOF的序列判断比赛输赢(洛谷P1042题题解,Java语言描述)
  5. 【面向对象】面向对象程序设计测试题10-类的设计测试题
  6. 文本处理三剑客awk的使用
  7. Mycat分库路由规则
  8. 回归分析之线性回归(N元线性回归)
  9. 《Redis官方文档》Data types—数据类型
  10. 【面试笔记系列】排序算法汇总