ggVennDiagram:直观韦恩图工具的新版本
iMeta主页:http://www.imeta.science
方 法
● 原文链接DOI: https://doi.org/10.1002/imt2.177
● 2024年2月14日,华中农业大学高春辉等在iMeta在线发表了题为 “ggVennDiagram: intuitive Venn diagram software extended” 的文章。
● 本文发布了ggVennDiagram新版本,该版本可绘制包含多达7个集合的子集区域填充Venn图,原生支持具有无限数目集合的Upset图,提供了R包、Shiny应用程序和TBtools插件等3种不同的应用方式。
● 第一作者:高春辉
● 通讯作者:蔡鹏(cp@mail.hzau.edu.cn)
● 合作作者:陈程杰,Turgut Akyol,Adrian Dusa,余光创,曹彬
● 主要单位:华中农业大学,新加坡南洋理工大学,华南农业大学,丹麦Aarhus University,罗马尼亚University of Bucharest,南方医科大学
亮 点
● 可绘制包含多达7个集合的子集区域填充Venn图;
● 原生支持了具有无限数目集合的Upset图;
● 提供了一个可用于多个集合的Venn计算器;
● 提供了R包、Shiny应用程序和TBtools插件等3种不同的应用方式。
全文解读
正 文
韦恩图是可视化多个集合之间关系的常用方法。作为最受欢迎的数据可视化平台之一,R语言环境中有VennDiagram、venn和RVenn等多个软件包用于绘制维恩图。在借鉴这些现有工具的基础上,我们在2019年开发了ggVennDiagram。ggVennDiagram支持图形语法、精确的子集区域填充,以及其它一些易于使用的功能,逐渐成为韦恩图可视化领域中最受欢迎的工具之一。
在过去的两年里,ggVennDiagram经历了持续的优化,并获得了100多次文献引用。在这项研究中,我们发布了一个里程碑版本,包括以下新功能:
更容易安装。在该版本之前,ggVennDiagram有一个庞大的包依赖树,其中包含90多个包。其中,sf包是依赖最重的包。它不仅占用的磁盘空间最大,而且还有几个系统依赖;这些依赖大多数用户都没有安装,所以会导致安装失败。然而,sf对于ggVennDiagram中的复杂形状的生成又是必须的,因此直接删除它是不可行的。考虑到这一点,我们将形状生成函数整合到了一个新包中,即shapeMageR,从而去掉了这个严重的依赖。此外,还删除了其它几个依赖项,包括RVenn、purrr、magrittr和plotly(见表S1)。现在,ggVennDiagram及其依赖项的总文件大小已经从210 MB(1.1.0版本)减少到了约36 MB(见文件S1)。这使得ggVennDiagram的安装比以前更容易。
图1. ggVennDiagram的功能
包含五个集合输入的维恩图(A)和Upset图(B)。(A)子集成员数量可以通过浅红色和深红色填充来区分。(B)顶部图显示了交集的大小;左侧图显示了五个集合的大小;主图显示了这些交集来自哪里。交集和集合按字母顺序排序。(C)Venn计算器的示例。用户可以通过对象的方法轻松访问Venn对象及其子集。参见后面的代码示例。ggVennDiagram Shiny应用程序的屏幕截图(D)和TBtools中的ggVennDiagram插件(E)。
原生支持Upset图。Venn图和Upset图都是用于集合数据可视化的方法。在R平台上,Upset图的绘制现在由UpsetR包支持。然而,考虑到二者的应用场景十分一致,我们认为将Upset方法与Venn图结合起来,向用户提供统一的方法会更好。因此,我们在ggVennDiagram中支持Upset图的绘制。Upset图的实现方法依赖于南方医科大学余光创教授开发的aplot包,该包主要功能是让多个子图之间的坐标轴自动对齐。因此,我们只需要首先创建Upset图的子图,然后将三个组件合并在一起就可以了。图1显示了ggVennDiagram生成的Venn图和Upset图。需要说明的是,这里展示的包含了五个(以及六个和七个)集合的Venn图形状集合图形的形状是从Adrian Dușa编写的“venn”软件包中导入的。
功能完备的Venn计算器。ggVennDiagram软件包中使用S4和S3类存储结构化的中间数据,例如集合以及子集包含的成员和它们的名称等。这些类对用户通常是不可见的。不过,在论文审稿过程中审稿人提出了一个Venn计算器的说法,即这些功能可被用来帮助用户计算集合以及子集之间复杂的关系。为此,我们进一步完善了该部分的方法,实现了对两个以上集合(无上限)复杂逻辑关系下的计算任务。如图1C所示,现在可以使用这些方法获取多个集合的交集、并集和特异性成员的清单,为下一步进一步深入分析成员的结构提供了一个途径。
官方Shiny应用程序和TBtools插件。Shiny是一个Web应用程序框架,允许开发人员创建基于Web的交互式数据可视化工具。新版ggVennDiagram中包括了一个 Shiny应用程序,并已经被部署到shinyapps.io(这是由Posit/RStudio提供的基于云的服务)。Shiny应用程序提供了ggVennDiagram软件包大多数的功能,并且同时支持导出多种不同的图片格式。其中,导出的矢量格式图(svg、pdf和pptx)可以在Adobe Illustrator、Microsoft PowerPoint等常用办公软件中进一步编辑和调整(图1D)。另外,TBtools是一个综合性的、有完备用户界面的生物信息学软件,可以用于完成多种的生物信息学任务,由华南农业大学陈程杰博士开发。在TBtools-II提供的插件商店中,现在已经提供了ggVennDiagram 的Shiny应用程序(图1E)。总的来说,通过Shiny APP和TBtools插件,我们提供了交互式用户界面,使得不懂编程的用户仍然可以借助于ggVennDiagram生成高质量的图形。
功能示例
为了展示用法,我们首先生成一个包括四个集合的示例数据集。
library(ggVennDiagram)
genes <-paste("gene",1:1000,sep="")
set.seed(20231214)
x <- list(A=Ssample(genes,300),
B=sample(genes,525),
C=sample(genes,440),
D=sample(genes,350))
ggVennDiagram 的特有功能是将子集的成员用不同的颜色填充来可视化,使我们可以一眼看出哪些子集包含的成员更多。此外,ggVennDiagram 返回的是一个 ggplot 对象,可以使用 ggplot 函数进一步修改。下面的代码改变了填充所使用的颜色。
library(ggplot2)
ggVennDiagram(x) + scale_fill_gradient(low="grey90",high = "red")
ggVennDiagram包最主要的函数就是ggVennDiagram(),使用该函数提供的一些参数,可以调整图形的外观和标签等。例如,下面的一行代码可以改变集合边(以及集合名称)的颜色。
ggVennDiagram(x, set_color =c("blue","red","green","purple"))
ggVennDiagram支持2到7维的维恩图绘制。生成的图通常是发表级的。ggVennDiagram() 函数会检查第一个参数中有多少项,并自动调用相应的函数。因为5个以上集合的形状不能使用简单的椭圆或者圆来表示,所以这里的形状是从 venn 包里面导入并加工后使用的(https://CRAN.R-project.org/package=venn)。
x <-list(A=sample(genes,300),
B=sample(genes,525),
C=sample(genes,440),
D=sample(genes,350),
E=sample(genes,200),
F=sample(genes,150),
G=sample(genes,100))
# two dimension Venn plot
ggVennDiagram(x[1:2],label = "none")
# three dimension Venn plot
ggVennDiagram(x[1:3],label ="none")
# four dimension Venn plot
ggVennDiagram(x[1:4],label ="none")
# five dimension Venn plot
ggVennDiagram(x[1:5],label ="none")
# six dimension Venn plot
ggVennDiagram(x[1:6],label = "none")
# seven dimension Venn plot
ggVennDiagram(x,label ="none")
新版本的 ggVennDiagram 原生支持了 Upset 图。当集合数目大于 7 或者设置 force_upset = TRUE 时会绘制 Upset 图。
# add an extra member in list
x$H =sample(genes,500)
ggVennDiagram(x)#> Warning in ggVennDiagram(x): Only support 2-7 dimension Venn diagram. Will give a plain upset plot instead.
#> Warning: Removed 1 rows containing missing values (`position_stack()`).
ggVennDiagram(x[1:4], force_upset =TRUE, order.set.by ="name", order.intersect.by ="none")
下面介绍 Venn 计算器的功能。首先生成一个list,包括4个集合。将这个list转化成 Venn 对象后,可以使用 overlap()、discern()、union() 以及 discern_overlap() 等函数计算任意集合的不同组合形式下的子集所包含的成员,为后续的数据挖掘提供支持。
set.seed(20231225)
y =list(
A =sample(letters, 8) |> sort(),
B =sample(letters, 8) |> sort(),
C =sample(letters, 8) |>sort(),
D =sample(letters, 8) |> sort())
# view the list
y
#> $A
#> [1] "a" "e" "g" "o" "p" "s" "t" "v"
#>
#> $B
#> [1] "a" "d" "f" "i" "k" "s" "y" "z"
#>
#> $C
#> [1] "b" "g" "k" "o" "r" "s" "u" "w"
#>
#> $D
#> [1] "b" "c" "e" "h" "k" "q" "s" "y"venn_y =Venn(y)
venn_y
#> An object of class 'Venn':
#> Slots: sets, names;
#> No. Sets: 4 SetNames: A, B, C, D.# find the overlaping members of two or more sets
overlap(venn_y, 1:2) # members in both the first two sets
#> [1] "a" "s"
overlap(venn_y) # members in all the sets
#> [1] "s"
# find the different members between sets and set unions
discern(venn_y, 1) # members in set 1, but not in the resting sets
#> [1] "p" "t" "v"
discern(venn_y, c("A","B"), 3) # members in set A & B, but not in the 3rd set
#> [1] "a" "e" "p" "t" "v" "d" "f" "i" "y" "z"
# find the specific members in one or more sets
discern_overlap(venn_y, 1) # specific items in set 1
#> [1] "p" "t" "v"
discern_overlap(venn_y, 1:2) # specific items in set 1 and set 2
#> [1] "a"
代码和数据可用性
ggVennDiagram是开源软件,可在CRAN(https://cran.r-project.org/package=ggVennDiagram)和GitHub(https://github.com/gaospecial/ggVennDiagram)上免费获取。ggVennDiagram Shiny应用程序可在Shinyapps.io上访问(https://bio-spring.shinyapps.io/ggVennDiagram)。TBtools插件可以通过软件的插件商店访问。补充资料(图表、表格、脚本、图形摘要、幻灯片、视频、中文翻译版本和更新资料)可在iMeta网站在线获取。
引文格式:
Gao, C.-H., Chen, C., Akyol, T., Dușa, A., Yu, G., Cao, B., and Cai, P. (2024). ggVennDiagram: intuitive Venn diagram software extended. iMeta 3, 69. doi: 10.1002/imt2.177
作者简介
高春辉(第一作者)
● 微生物学博士,业余软件工程师,现为华中农业大学资源与环境学院副研究员,硕士生导师。
● 研究方向为合成微生物群落的功能和调控机制。
蔡鹏(通讯作者)
● 华中农业大学资源与环境学院教授,博士生导师,国家杰出青年基金和优秀青年基金获得者。
● 研究方向为土壤生物膜与环境健康。
机器学习