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

韦恩图,相信很多人都不陌生。韦恩图主要的作用是展示集合之间的关系,帮助我们查看集合元素的分布关系。
韦恩图在生命科学领域也有重要的应用,例如在组学中,不同组之间差异基因的比较,或者不同处理间基因变化等,都可以用韦恩图表示,读文章的时候也会经常碰见。
相比于直接将集合元素列为表格展示,韦恩图的展示更加直观,包含更多的信息,能够让研究人员从中获取有用的信息。韦恩图的做法很简单,列出几个集合的元素,找交集、差集等作图。

图片来源:文献截图,参考文献【1】
然而,大家有没有思考过一个问题:一般在文献中见到的韦恩图最多也就 4 个集合,很多在线工具画韦恩图的极限是 4 个集合。可是,当想要展示的集合数超过 4 时,应该怎么作图?能否作图?结果还能解读吗?
带着这些疑问,接下来跟着师兄探究一下。
一、在线韦恩图工具
在平常的研究中,如果需要比较或者作图的集合数不多,师兄强烈建议使用在线工具。不为别的,就为它简便快捷、高效有用。至于用什么在线工具,可以先求助一下度娘,会有一大堆推荐,选择自己看得过去的即可。
在这里,师兄要介绍一款在线工具 DeepVenn,介绍它是因为其特殊性,它最多可以接受 10 个集合做韦恩图,这也是个开放、免费的在线工具。
DeepVenn 在线工具网址:http://www.deepvenn.com/

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

数据略有修改:参考文献【2】(图片来源:自己做的)
将每个集合的元素复制粘贴到 DeepVenn 中,点击右侧的「Draw as PNG」,一键出图,做好的结果如下:

图片来源:网站截图
从这个结果可以看出,5 个集合也是能做出用圈圈展示的韦恩图的,点击页面右侧的交集、并集等可以查看具体的元素。
然而,到这里我们也注意到了一个问题,那就是假设要用这个韦恩图对自己的结果进行解析,似乎从这个图上基本基本看不出任何信息,因为杂乱无章。写文章根本不好描述,别人看了也会觉得差劲,这违背了科学作图的初衷。
很显然,这个时候就需要寻求别的方法了,接着往下看。
二、Upset 展示不太像韦恩图的韦恩图(R 语言版本)
这部分需要涉及到 R 语言,还是因为前面提到的那篇《PNAS》文章,师兄在阅读的时候,看到一张图,只看图一开始是比较迷惑的,不知道什么东西,为什么这么展示,有什么目的?
通过图例发现是 UpSet 做的,暂且称作 UpSet plots 吧。

图片来源:文献截图,参考文献【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)
这个结果与原来文章的图片不能说是相似,只能说是一摸一样。

图片来源:自己做的
如果想要标记感兴趣的交集,可以加「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)))

图片来源:自己做的
三、在线 Upset
当然了,师兄也考虑到很多人不会 R 语言,对于这种好东西会望而却步,在线工具也有很多。这里介绍一款师兄之前也用过的工具——imageGP,这是一款免费的在线画图工具。
网址:http://www.ehbio.com/ImageGP/index.php/Home/Index/index.html
打开网站,在首页找到「Upset」画图选项。

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

图片来源:网站截图
将自己的数据粘贴进去。

图片来源:自己做的
选择默认的参数,点击页面下方「PLOT」,即可一键出图,最后下载文件即可,是不是使用起来很简单?
与之前 R 语言画的一样,但是缺点是可调整的参数不多。文件可以下载为 PDF 格式,可以自己再添加东西或者修饰。

图片来源:网站画图
以上就是今天的全部内容了,希望对你的研究有用。
















































