专栏首页优雅R使用ComplexHeatmap绘制3D热图

使用ComplexHeatmap绘制3D热图

起因

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_optHEATMAP_LEGEND_PADDING和ht_optTITLE_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()即可:

本文分享自微信公众号 - 优雅R(elegant-r)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用ComplexHeatmap绘制热图(一)

    作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源。

    生信宝典
  • 用 ComplexHeatmap 包绘制复杂热图

    在 ComplexHeatmap 中单个热图由热图主体和热图组件组成。热图主体可按行或列进行拆分。热图组件包括标题,进化树,矩阵名称和热图注释,可分别放置于热图...

    生信菜鸟团
  • ComplexHeatmap|绘制单个热图-I

    ComplexHeatmap可以绘制很复杂的热图,能满足日常以及文章所需,本次先简单的介绍单个热图绘制的内容。

    西游东行
  • ComplexHeatmap |理解绘图逻辑绘制热图

    作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源。

    生信宝典
  • ComplexHeatmap包更新支持pheatmap转换

    pheatmap是热图中使用频率比较高一个R包,ComplexHeatmap:用于绘制、注释和排列复杂热图。现在ComplexHeatmap 迎来新版本升级,支...

    生信菜鸟团
  • 一文详解如何用 R 语言绘制热图

    AI 研习社按:作为目前最常见的一种可视化手段,热图因其丰富的色彩变化和生动饱满的信息表达被广泛应用于各种大数据分析场景。同时,专用于大数据统计分析、绘图和可视...

    AI研习社
  • R语言复杂热图的绘制

    大家对热图应该都不陌生,但是混合的复杂热图在我们的应用中并不是太多见。今天给大家介绍一个绘制复杂热图的R包ComplexHeatmap。

    一粒沙
  • TCGA|根据somatic mutation绘制突变景观图(oncoplot)和基因词云

    使用 XENA下载的TCGA-LAML.mutect2_snv.tsv文件绘制基因词云和突变景观图。

    西游东行
  • R 语言绘制热图的 10 种方法

    说在前面 此前我们已经推送了不少深入解读的文章,今天希望做一点新的尝试——介绍 R 语言绘图。这一期分享 R 语言绘制热图的案例,希望大家通过案例感受 R 语言...

    企鹅号小编
  • R 热图绘制heatmap①

    用户1359560
  • 热图在单细胞数据分析中的应用

    热图是一个以颜色变化来显示数据的可视化矩阵,Toussaint Loua在1873年就曾使用过热图来绘制对巴黎各区的社会学统计。我们就拿这张简单朴素的热图来讲一...

    生信技能树jimmy
  • 羡慕高分文章美图?这26款好看的可视化R包助你一臂之力

    本文将简要盘点R中常用的可视化包,并通过简要介绍包的特点来帮助读者深入理解可视化包。

    生信交流平台
  • R绘制甲基化和表达谱联合分析热图

    随着时代的发展,单一研究转录组、蛋白代谢、甲基化等已经难以满足研究者越来越高的研究期望,大家更多地期望联合多种数据进行多组学联合分析。那么这时候,一种好的展示结...

    生信交流平台
  • ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)

    https://github.com/jokergoo/ComplexHeatmap

    西游东行
  • 使用seaborn绘制热图

    除了统计图表外,seaborn也可以绘制热图,而且支持聚类树的绘制,绘制热图有以下两个函数

    生信修炼手册
  • 使用matplotlib绘制3D图表

    除了绘制经典的二维图表外,matplotlib还支持绘制三维图表,通过mplot3d工具可以实现,只需要在axes对象中指定projection参数为3d即可,...

    生信修炼手册
  • 使用Python绘制点击图、热图

    via: http://blog.csdn.net/wenyusuran/article pyHeatMap是一个使用Python生成热图的库,基本代码是我一年...

    机器学习AI算法工程
  • 「R」使用NMF包绘制热图

    学习文档: https://cran.r-project.org/web/packages/NMF/vignettes/heatmaps.pdf

    王诗翔呀
  • R语言绘图 | 使用pheatmap快速绘制热图

    首先,我们需要准备输入文件。比如,我想绘制热图来比较30个基因在6个组织里的表达情况。

    生信小王子

扫码关注云+社区

领取腾讯云代金券