iMeta | 更好的ggVennDiagram, 更好用的韦恩图工具
myzbx 2025-04-27 15:06 15 浏览
点击蓝字 关注我们
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 Dusa编写的“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., Dusa, A., Yu, G., Cao, B., and Cai, P. (2024). ggVennDiagram: intuitive Venn diagram software extended. iMeta 3, 69. doi: 10.1002/imt2.177
作者简介
高春辉(第一作者)
● 微生物学博士,业余软件工程师,现为华中农业大学资源与环境学院副研究员,硕士生导师。
● 研究方向为合成微生物群落的功能和调控机制。
蔡鹏(通讯作者)
● 华中农业大学资源与环境学院教授,博士生导师,国家杰出青年基金和优秀青年基金获得者。
● 研究方向为土壤生物膜与环境健康。
相关推荐
- 怎么恢复7z文件 7z文件删除了怎么恢复
-
7z是一种压缩格式的文件,它运用LZMA压缩算法,该压缩算法的输出稍后被算数编码进行处理以便后续进一步压缩,压缩比十分高。我们可以将文件压缩成这种格式,便于传输,保存,占空间少。了解更多7z文件知识...
- 郎酒让消费者喝得明明白白 算术题里有答案
-
日前,『郎酒酱香产品企业内控准则』颁布,郎酒首次公开酱香产品生产全过程,公布酱香产品产能、储能及投放计划。随后,郎酒官微向消费者发出「品控算术题」有奖问答。郎酒亮出家底,消费者踊跃留言。8天后,谜底揭...
- 学龄前,比识字、算术更重要的是这三件事
-
“为了给孩子选择一家合适的幼儿园,我曾穿梭于纽约各家幼儿园的开放日,这些幼儿员既包括主流的公立幼儿园,还包括那些遥不可及的私人幼儿园。我的目的就是想了解他们的教育理念是什么,到底厉害在哪里,看看对于我...
- 参加CSP-J信奥赛需要掌握数学知识
-
在C++语法的学习中需要储备的数学知识如下①数据类型:需要知道整数、正整数、负整数、小数、判断对错②算术运算符:加法、减法、乘法、除法、取模运算③关系表达式:大于、大于等于、小于、小...
- 1g米饭能做多少深蹲?今天我们来算一算
-
减重我们都知道3分在练,7分在吃,吃这件事情上,真的是每一口都算数。今天我们来算一笔账,1粒米饭可以做多少事情?本着认真负责的态度,今天在食物秤上称了1g米饭,是16粒。根据能量换算:100g米饭是4...
- web 自动化测试,一定得掌握的 8 个核心知识点
-
使用cypress进行端对端测试,和其他的一些框架有一个显著不同的地方,它使用JavaScript作为编程语言。传统主流的selenium框架是支持多语言的,大多数QA会的pytho...
- 大话C语言:赋值运算符(c语言中赋值运算符是什么)
-
赋值运算符是最基本的运算符之一,用于将右侧的值或表达式的计算结果赋给左侧的变量。它是一个二元运算符,意味着它需要两个操作数:一个是目标变量(左侧),另一个是要赋给该变量的值或表达式(右侧)。赋值运算符...
- Vue进阶(幺幺伍):js 将字符串转换为boolean
-
Boolean();参数为0、null和无参数返回false,有参数返回true。Boolean("");//输出为:falseBoolean(null);//输出为...
- mongodb查询的语法(大于,小于,大于或等于,小于或等于等等)
-
1).大于,小于,大于或等于,小于或等于$gt:大于$lt:小于$gte:大于或等于$lte:小于或等于例子:db.collection.find({"field":{$gt:valu...
- Python学不会来打我(21)python表达式知识点汇总
-
在Python中,表达式是由变量、运算符、函数调用等组合而成的语句,用于产生值或执行特定操作。以下是对Python中常见表达式的详细讲解:1.1算术表达式涉及数学运算的表达式。例如:a=5b...
- C|数据存储地址与字节偏移、数据索引
-
话说C是面向内存的编程语言。数据要能存得进去,取得出来,且要考虑效率。不管是顺序存储还是链式存储,其寻址方式总是很重要。顺序存储是连续存储。同质结构的数组通过其索引表示位置偏移,异质结构的结构体通过其...
- 下班后累懵?4 个 JS 手写题帮你搞定前端面试高频考点
-
打工人下班后最痛苦的事,莫过于拖着疲惫的身子还要啃前端面试题吧?看着那些密密麻麻的JS代码,脑子都快转不动了!别担心,今天咱就用轻松的方式,带你吃透4道高频手写题,让你在面试时自信满满,再也不...
- 嵌入式数据库sqlite3【进阶篇】-子句和函数的使用,小白一文入门
-
sqlite在《嵌入式数据库sqlite3命令操作基础篇-增删改查,小白一文入门》一文中讲解了如何实现sqlite3的基本操作增删改查,本文介绍一些其他复杂一点的操作。比如where、orderby...
- 前缀表达式与后缀表达式(前缀表达式后缀表达式中缀表达式计算)
-
昨天晚上和儿子一起学习了前缀表达式和后缀表达式。这应该是字符串算式如何被计算机识别并计算的2种方法。本来是想先给他讲一个逆波兰式(后缀表达式),以后再讲前缀表达式。没想到他还挺聪明,很快就把2个都掌握...
- Python快速入门教程1:基本语法、数据类型、运算符、数字字符串
-
Python3的基础教程,涵盖了基本语法、数据类型、类型转换、解释器、注释、运算符、数字和字符串等内容,并附有使用实例场景。Python3的基础教程,涵盖了基本语法、数据类型、类型转换、解释器、注释、...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)