当前位置: 首页 > news >正文

ggalign:热图等复杂组合图及图形数据对齐的 ggplot2 扩展

ggalign

一个 R 语言绘图工具 ggplot2 的高级扩展,它专注于在多个图形之间对齐观察值,利用 vctrs 包中的“number of observations”或 NROW() 函数,确保图形组织的一致性。无论是自包含排序图形的对齐,还是在多个图形中应用一致的分组和排序(如 k-means 聚类),ggalign 都可以帮助简化这一过程。

文档:A ggplot2 Extension for Consistent Axis Alignment

安装

两种方式,分别对应安装稳定版本和开发版本:

# CRAN
install.packages("ggalign")# 或者 github
# install.packages("remotes")
remotes::install_github("Yunuuuu/ggalign")

使用

如果熟悉ggplot2的语法,那么上手使用ggalign将很容易。下面将介绍使用 ggalign 中的 ggheatmap 等实现热图可视化,用来简单理解其功能

加载工具、创建数据

library(ggalign)
set.seed(123)
small_mat <- matrix(rnorm(81), nrow = 9)
rownames(small_mat) <- paste0("row", seq_len(nrow(small_mat)))
colnames(small_mat) <- paste0("column", seq_len(ncol(small_mat)))
head(small_mat)

在这里插入图片描述

可以看到,ggalign所需的输入数据格式,很符合人们容易理解的热图绘制逻辑

带有聚类分支树的热图

# initialize the heatmap layout, we can regard it as a normal ggplot object
ggheatmap(small_mat) +# we can directly modify geoms, scales and other ggplot2 componentsscale_fill_viridis_c() +# add annotation in the tophmanno("top") +# in the top annotation, we add a dendrogram, and split observations into 3 groupsalign_dendro(aes(color = branch), k = 3) +# in the dendrogram we add a point geomgeom_point(aes(color = branch, y = y)) +# change color mapping for the dendrogramscale_color_brewer(palette = "Dark2")

在这里插入图片描述

带有行/列注释的热图

ggheatmap(small_mat) +scale_fill_viridis_c() +hmanno("t", size = 0.5) +align_dendro(aes(color = branch), k = 3L) +ggalign(aes(y = value), data = rowSums) +geom_bar(stat = "identity", aes(fill = factor(.panel))) +scale_fill_brewer(name = NULL, palette = "Dark2") +hmanno("l", size = 0.5) +align_dendro(aes(color = branch), size = 0.5, k = 4L) +ggalign(aes(x = value), data = rowSums) +geom_bar(aes(y = .y, fill = factor(.y)),stat = "identity",orientation = "y") +scale_fill_brewer(name = NULL, palette = "Paired", guide = "none")

在这里插入图片描述

复杂热图

使用 ComplexHeatmap 的示例数据:

mat <- readRDS(system.file("extdata", "measles.rds", package = "ComplexHeatmap"))

绘图:

ggheatmap(mat, filling = FALSE) +geom_tile(aes(fill = value), color = "white") +scale_fill_gradientn(colours = c("white", "cornflowerblue", "yellow", "red"), values = scales::rescale(c(0, 800, 1000, 127000), c(0, 1))) +theme(axis.text.x = element_text(angle = -70, hjust = 0)) +hmanno("t", size = unit(2, "cm")) +ggalign(data = rowSums) +geom_bar(aes(y = value), fill = "#FFE200", stat = "identity") +scale_y_continuous(expand = expansion()) +ggtitle("Measles cases in US states 1930-2001\nVaccine introduced 1961") +theme(plot.title = element_text(hjust = 0.5)) +hmanno("r", size = unit(6, "cm")) +ggalign(data = rowSums) +geom_bar(aes(x = value), fill = "#FFE200", stat = "identity", orientation = "y") +scale_x_continuous(expand = expansion()) +theme(axis.text.x = element_text(angle = -60, hjust = 0)) +hmanno("r") +align_dendro(plot_dendrogram = TRUE) +theme(axis.text = element_blank(), axis.title = element_blank(), axis.ticks = element_blank())

在这里插入图片描述

图片生成的逻辑很清晰,每个子图都可以单独调整主题样式等,但是需要注意的是两个字:顺序,即 子图1 + 子样式1 + 子图2 + 子样式2 的串联顺序。样式的调整只对其承接的子图生效。

我为什么使用 ggalign

几年前,我曾尝试开发一个基于 ggplot2 的热图可视化扩展,由于缺乏动力,一直搁置。后来,出现一个名为 ggheatmap 的工具,但对我来说,差强人意,兼容性有限,其并不完全兼容 ggplot2 的语法。前段时间,我在浏览生信技能树的推文是,偶然看到一篇关于 ggalign 的推文,竟莫名的兴奋(有点子奇怪)。后来,我试用了这个工具,起初以为它只是一个简单的热图工具,但深入查看文档后,才发现它的功能远不止于此。

在日常数据处理和分析中,使用 R 语言进行数据可视化已成为一个不可或缺的环节。在 R 语言的可视化工具中,ggplot2 被广泛认为是必经之路,它为用户提供了灵活而强大的方式来创建各类可视化。然而,ggplot2 存在一个“隐性”的局限性,它要求输入数据采用长格式,这对于许多初学者来说可能是一个不小的“思维门槛”。例如,当我处理标准化后的基因表达矩阵时,通常它以宽数据格式呈现。如果想使用 ggplot2geom_tile 来绘制热图,以展示基因的表达情况,就必须将数据重塑:宽数据转换为长数据。

虽然一些其他工具(如 ComplexHeatmap)提供了更符合直观逻辑的数据格式,采用“数据即热图”的方式,但这些工具通常拥有独立的语法和对象类型,导致其输出与 ggplot2 生态体系不兼容。在进行图形拼接,我常常需要依赖额外工具,如拼图工具 patchwork,在数据对齐时,比如把我做好的聚类树和 ComplexHeatmap 的热图拼接到一起,必须保证二者数据顺序的一致性,这时,需要复杂的手动操作……

然而,ggalign 的出现有效地解决了这一问题。它的 ggheatmap 等函数允许我直接使用宽数据格式,并基于 ggplot2 语法进行数据可视化,从而简化了工作流程,让绘制热图、拼接、不同他可视化的数据对齐等其他操作变得更高效、便捷。


http://www.mrgr.cn/news/70518.html

相关文章:

  • 秃姐学AI系列之:样式迁移 + 代码实现
  • 320页PDF | 集团IT蓝图总体规划报告-德勤(限免下载)
  • 前端神经网络入门(三):深度学习与机器学习的关系、区别及核心理论支撑 - 以Brain.js示例
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码原理.编码相关api
  • python入门3
  • Wxml2Canvas小程序将dom转为图片,bug总结
  • 计算机在启动一直到系统加载完成期间进行了哪些操作
  • 【缠论箱体预测】主图指标 缠论自动划箱体 看透压力支撑对趋势胸有成竹 (电脑+手机源码)
  • 206面试题(47~60)
  • fask的一个程序
  • 稳恒磁场(2)
  • c语言学习11跳转结构
  • 软件测试常用设计模式
  • Java项目实战II基于微信小程序的学生公寓电费信息管理系统(开发文档+数据库+源码)
  • QtWebServer
  • 【WRF模拟】全过程总结:WPS预处理及WRF运行
  • 展望:多模态融合与marker推断
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】标题栏
  • Kafka-Eagle 监控 搭建
  • CHS许可管理系统
  • 提高排名的有效策略与实践指南
  • 2024 年度分布式电力推进(DEP)系统发展探究
  • Linux(CentOS)安装 Nginx
  • 【Java Web】Servlet
  • (三 上)VB2010 语言基础
  • 五分钟掌握vue3!!!