dxy logo
首页丁香园病例库全部版块
搜索
登录

4 组以上的韦恩图,如何做的高端大气上档次?不妨试试这些方法?

丁香园官方号 · 发布于 2022-08-15 · IP 浙江浙江
5323 浏览
这个帖子发布于 3 年零 91 天前,其中的信息可能已发生改变或有所发展。
img

韦恩图,相信很多人都不陌生。韦恩图主要的作用是展示集合之间的关系,帮助我们查看集合元素的分布关系。

韦恩图在生命科学领域也有重要的应用,例如在组学中,不同组之间差异基因的比较,或者不同处理间基因变化等,都可以用韦恩图表示,读文章的时候也会经常碰见。

相比于直接将集合元素列为表格展示,韦恩图的展示更加直观,包含更多的信息,能够让研究人员从中获取有用的信息。韦恩图的做法很简单,列出几个集合的元素,找交集、差集等作图。


img

图片来源:文献截图,参考文献【1】


然而,大家有没有思考过一个问题:一般在文献中见到的韦恩图最多也就 4 个集合,很多在线工具画韦恩图的极限是 4 个集合。可是,当想要展示的集合数超过 4 时,应该怎么作图?能否作图?结果还能解读吗?

带着这些疑问,接下来跟着师兄探究一下。


一、在线韦恩图工具

在平常的研究中,如果需要比较或者作图的集合数不多,师兄强烈建议使用在线工具。不为别的,就为它简便快捷、高效有用。至于用什么在线工具,可以先求助一下度娘,会有一大堆推荐,选择自己看得过去的即可。

在这里,师兄要介绍一款在线工具 DeepVenn,介绍它是因为其特殊性,它最多可以接受 10 个集合做韦恩图,这也是个开放、免费的在线工具。

DeepVenn 在线工具网址:http://www.deepvenn.com/


img

图片来源:网站截图


带着本文最开始提出的问题,我们实践一下。为了让这个实践更具有参考性,师兄下载了一篇发表在《PNAS》上的文章,用文章提供的数据来做 5 个集合的韦恩图,用实践的数据来帮助理解(从科研中来,到科研中去)。


img

数据略有修改:参考文献【2】(图片来源:自己做的)


将每个集合的元素复制粘贴到 DeepVenn 中,点击右侧的「Draw as PNG」,一键出图,做好的结果如下:


img

图片来源:网站截图


从这个结果可以看出,5 个集合也是能做出用圈圈展示的韦恩图的,点击页面右侧的交集、并集等可以查看具体的元素。

然而,到这里我们也注意到了一个问题,那就是假设要用这个韦恩图对自己的结果进行解析,似乎从这个图上基本基本看不出任何信息,因为杂乱无章。写文章根本不好描述,别人看了也会觉得差劲,这违背了科学作图的初衷。

很显然,这个时候就需要寻求别的方法了,接着往下看。


二、Upset 展示不太像韦恩图的韦恩图(R 语言版本)

这部分需要涉及到 R 语言,还是因为前面提到的那篇《PNAS》文章,师兄在阅读的时候,看到一张图,只看图一开始是比较迷惑的,不知道什么东西,为什么这么展示,有什么目的?

通过图例发现是 UpSet 做的,暂且称作 UpSet plots 吧。


img

图片来源:文献截图,参考文献【2】


在经过一番仔细研究后,发现这个 UpSet plots 就是「披着马甲」的韦恩图。

其本质与韦恩图一样——展示集合关系,但是优点在于可以清楚、有条理、美观地展示出 4 组以上集合的关系,用 Upset 的方式展示集合,会让结果更加明了,也更具数据意义。

UpSet 也是师兄要说的主角!接下来讲解如何实现它,完全复制文章中的图片。

这篇《PNAS》文章提供了作图的原始数据,也就是之前展示的数据,接下来就以它为基础作图(tips:很多优秀的文章都会上传原始数据和数据处理过程,阅读文献时可以关注一下,对于提高自己的研究有很重要的作用)。


第一步,安装需要的软件包。

1、devtools::install_github("GuangchuangYu/UpSetR")  

2、library(UpSetR)  


第二步,加载数据。

数据可以是每个集合一个文件,这里为了演示更加基础,使用这种办法。也可以是一个文件,例如数据框的形式,再提取每列的元素作图。

1、setwd("D:/生物信息学/Upset")  

2、NK <- read.table("1.txt")  

3、NK <- as.list(NK$V1)  

4、TC <- read.table("2.txt")  

5、TC <- as.list(TC$V1)  

6、BC <- read.table("3.txt")  

7、BC <- as.list(BC$V1)  

8、DC <- read.table("4.txt")  

9、DC <- as.list(DC$V1)  

10、MC <- read.table("5.txt")  

11、MC <- as.list(MC$V1)  

12、# 读入每一个集合,并转化为 list  


第三步,用 Upset 自带的函数转换数据结构,符合画图要求。

1、example <-list(NK = NK,TC = TC,BC = BC,DC = DC,MC = MC) # 合并列表  

2、example <- fromList(example)#Upset 自带函数转化数据结构  

3、setsBarColors <-c('#EA4335', '#FBBC05', '#34A853', '#4285F4', '#68A180')# 设置集合颜色  


第四步,画图。

参数使用如下参数即可,如果感兴趣想深入探究,可以自己换着参数多试几遍。

1、upset(example,  

2、nsets = length(example),  

3、nintersects = 1000,  

4、sets = c('DC','MC',"BC","TC","NK"),# 这里的集合顺序和图上呈现的是相反的  

5、keep.order = TRUE,  

6、point.size = 3,  

7、line.size = 1,  

8、number.angles = 0,  

9、text.scale = c(1.5, 1.2, 1.2, 1, 1.5, 1),  

10、order.by ="freq",  

11、matrix.color ="#4285F4",  

12、main.bar.color = 'black',  

13、mainbar.y.label = 'OM vs. OF',  

14、sets.bar.color = setsBarColors)  

这个结果与原来文章的图片不能说是相似,只能说是一摸一样。


img

图片来源:自己做的


如果想要标记感兴趣的交集,可以加「queries」这个参数,list 中列出需要查看的交集,并设置颜色即可。

1、upset(example,  

2、nsets = length(example),  

3、nintersects = 1000,  

4、sets = c('DC','MC',"BC","TC","NK"),  

5、keep.order = TRUE,  

6、point.size = 3,  

7、line.size = 1,  

8、number.angles = 0,  

9、text.scale = c(1.5, 1.2, 1.2, 1, 1.5, 1),   

10、order.by ="freq",  

11、matrix.color ="#4285F4",  

12、main.bar.color = 'black',  

13、mainbar.y.label = 'OM vs. OF',  

14、sets.bar.color = setsBarColors,  

15、queries = list(list(query = intersects,  

16、params = list('DC','MC',"BC","TC","NK"), color = "red", active = T)))


img

图片来源:自己做的


三、在线 Upset

当然了,师兄也考虑到很多人不会 R 语言,对于这种好东西会望而却步,在线工具也有很多。这里介绍一款师兄之前也用过的工具——imageGP,这是一款免费的在线画图工具。

网址:http://www.ehbio.com/ImageGP/index.php/Home/Index/index.html

打开网站,在首页找到「Upset」画图选项。

img

图片来源:网站截图


点击进去,里面有示例,准备怎样的数据结构用于画图,这里师兄选择了「Long format」。


img

图片来源:网站截图


将自己的数据粘贴进去。


img

图片来源:自己做的


选择默认的参数,点击页面下方「PLOT」,即可一键出图,最后下载文件即可,是不是使用起来很简单?

与之前 R 语言画的一样,但是缺点是可调整的参数不多。文件可以下载为 PDF 格式,可以自己再添加东西或者修饰。

img

图片来源:网站画图


以上就是今天的全部内容了,希望对你的研究有用。

1 10 点赞

全部讨论(0)

默认最新
avatar
1
分享帖子
share-weibo分享到微博
share-weibo分享到微信
认证
返回顶部