iMeta | 更好的ggVennDiagram, 更好用的韦恩图工具

点击蓝字 关注我们

ggVennDiagram:直观韦恩图工具的新版本

921ebcdeb0c4aa3af254ef30d556f13f.png

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,南方医科大学

亮   点

1668fcb54daa8a5ae6283029aac9cd83.jpeg

●  可绘制包含多达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的安装比以前更容易。

8f1f551b7b882f85bcffe258c5ae388c.png

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

069d88dbc77abc01e5fd45e79a32181b.png

ggVennDiagram包最主要的函数就是ggVennDiagram(),使用该函数提供的一些参数,可以调整图形的外观和标签等。例如,下面的一行代码可以改变集合边(以及集合名称)的颜色。

ggVennDiagram(x, set_color =c("blue","red","green","purple"))

86a1db363c33b689006c70cd27828f1b.png

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

c9614bf2f46587823fa05785f40f20d3.png

新版本的 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()`).

9fc960afa9b5e07437092a630e4e1524.png

ggVennDiagram(x[1:4], force_upset =TRUE, order.set.by ="name", order.intersect.by ="none")

87d26d0b82fb83487a5cc7398f258be4.png

下面介绍 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

作者简介

37534b26c29ff2124541e3b65344701e.jpeg

高春辉(第一作者)

●  微生物学博士,业余软件工程师,现为华中农业大学资源与环境学院副研究员,硕士生导师。

● 研究方向为合成微生物群落的功能和调控机制。

52c0eafe6ec1023f774dee1bbe9a28a6.jpeg

蔡鹏(通讯作者)

●  华中农业大学资源与环境学院教授,博士生导师,国家杰出青年基金和优秀青年基金获得者。

●  研究方向为土壤生物膜与环境健康。

更多推荐

(▼ 点击跳转)

高引文章 ▸▸▸▸

iMeta | 引用7000+,海普洛斯陈实富发布新版fastp,更快更好地处理FASTQ数据

276a3baece9212d0270dbbe3b6c2b5b8.png

高引文章 ▸▸▸▸

iMeta | 德国国家肿瘤中心顾祖光发表复杂热图(ComplexHeatmap)可视化方法

a5e8bef0274fa93f4a87d2b1abed8ffa.png

高引文章▸▸▸▸

iMeta | 高颜值绘图网站imageGP+视频教程合集                                        

c51050f36152c35b26b49adf76e60f7c.png

9635ef4ae7ba8ae41f305a5db6a77005.jpeg

1卷1期

aa40ee4c200edc8f3d24bbc2697f251e.jpeg

1卷2期

e5d6f75e8e3b89b6e1f4d4e0a0dc7c85.jpeg

1卷3期

7f709e96fafc5662e5d234957afbd22a.jpeg

1卷4期

a4378341c6ac4faa43a3646196bc5829.jpeg

2卷1期

e6280c33b83b22064164883989c4bd0c.jpeg

2卷2期

5029d9fec3472c3c7a221d9b7ddc39d0.png

2卷3期

0d65d6204267fc75618f319a7b08389c.jpeg

2卷4期

期刊简介

“iMeta” 是由威立、肠菌分会和本领域数百位华人科学家合作出版的开放获取期刊,主编由中科院微生物所刘双江研究员和荷兰格罗宁根大学傅静远教授担任。目的是发表原创研究、方法和综述以促进宏基因组学、微生物组和生物信息学发展。目标是发表前10%(IF > 15)的高影响力论文。期刊特色包括视频投稿、可重复分析、图片打磨、青年编委、50万用户的社交媒体宣传等。2022年2月正式创刊发行!目前期刊已经被ESCI、Scopus等数据库收录。

联系我们

iMeta主页:http://www.imeta.science

出版社:https://onlinelibrary.wiley.com/journal/2770596x
投稿:https://mc.manuscriptcentral.com/imeta
邮箱:office@imeta.science

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值