基于R语言绘制韦恩图和多集合的UpSetPlot

Python041

基于R语言绘制韦恩图和多集合的UpSetPlot,第1张

韦恩图(Venn plot),又称文氏图,是英国的哲学家和数学家约翰·维恩(John Venn)在1881年发明的,主要是用于展示在不同的事物群组(集合)之间的数学或逻辑联系,尤其适合用来表示集合(或)类之间的“大致关系”,它也常常被用来帮助推导(或理解推导过程)关于集合运算(或类运算)的一些规律。在我们常用的领域,简单来说就是多个集合之间取交集。

绘制韦恩图有很多方式,R,Python,Perl等,这里主要是用R来展示;在R语言中,绘制venn图有很多包可以实现:Venn, Vennplot, VennDiagram, VennDetail, ggvenn,gplots等。

此文主要展示一下用VennDiagram包绘制高纬度的韦恩图。

这样一个简单的GUOFUYASEWANG(国服亚瑟王)的韦恩图就画出来,通过参数给他加点颜色,美观一下。

增加配色之后好看了不少。

除了用R绘制韦恩图,还可以用网站实现。 http://www.interactivenn.net/ 可以绘制2-6维的韦恩图,不需要学会R也能绘制韦恩图。同学们可以自行探索。

有时候自己需要取交集的数据集太多,韦恩图满足不了,可以采用UpSetplot,它可以将交集数目通过柱状图的方式呈现。以UpSetR包里的movies文件做示例:

这是一个3883行,21列的数据集,包含了1995上映的电影具体情况(如Action是否是运动电影,0表示不是运动电影,1表示是运动电影,以此类推)

该图中 黑色 表示该位置有数据, 灰色 的点表示没有, 不同点连线 表示存在 交集 , 不同 柱状图 表示不同的 数目

Hoang的地址: https://www.jianshu.com/u/1fd4ff43abdc

对于数据集之间交叠关系的可视化,通常想到的是绘制韦恩图。

韦恩图是一种关系型图表,通过图形之间的重叠来反映数据集之间的相交关系。

下面,我们来简单介绍一下如何绘制韦恩图

绘制韦恩图的包有很多,比如 gplots 包的 venn() 函数、 limma 包的 vennDiagram() 函数、 venneuler 包的 venneuler() 函数。

但是这些包绘制出来的图像效果都不是很好,所以我们使用比较成熟的包 VennDiagram 来绘制韦恩图

安装导入

VennDiagram 最多能够绘制 5 个集合,分别有对应的绘制函数:

四、五个的就不画了,要设置太多的参数了,意思就是这么个意思,理解了就行。

这些函数需要显示的指定每个集合的大小以及集合之间的交叠的元素数目,太麻烦了

我们可以使用 venn.diagram 函数,将集合以列表的方式传递给参数 x

这样就不需要自己手动计算集合之间的交集,并传递大量的参数了

注意 :在这里,我们指定了图形输出文件,如果不想保存到文件中,只是在 RStudio 中查看,可以

两个集合也是一样的

五个集合

不能再多了,再多也分不清楚谁是谁了,像这五个集合的交叠已经比较难分辨了。

知道了如何绘制,那剩下的就是该怎么调整一些图形属性了。

venn.diagram 函数的参数非常多

例如,显示交叠数量的百分比和原始数值格式

不显示圆周线条

​如何在差异基因Venn图中同时标识上下调基因数量信息

韦恩(Venn)图是常见统计图之一,用于展示各样本(或分组)之间共有(或特有)元素的数量(或比例)。例如做RNA-seq的最直接目的,大多是鉴定差异表达的基因。当试验涉及到多分组情况时,常需要展示多组间共享的差异基因数量,这个时候就要使用到Venn图。例如文献 “Transcriptomic analyses of rice (Oryza sativa) genes and non-coding RNAs under nitrogen starvation using multiple omics technologies” 中,植物组织中响应7天氮缺乏(-N_7d)、7天磷酸盐缺乏(-Pi_7d)和盐胁迫(d)、冷胁迫(e)或干旱胁迫(f)的差异表达lncRNA的Venn图。

不过这种Venn图太过单调,虽然展示了差异基因的数量,却没有区分基因是上调的还是下调的。另一种思路是,分别把上调或下调的基因拿出来,然后分别作图展示上调基因间的交集或者下调基因间的交集,但缺点是如果分组较多的话会很占篇幅,并且如果一个基因在一组中上调而在另一组中下调时则无法绘制出。

为了有效解决这些问题,今天我们来看一种特殊风格的Venn图,能够同时展示基因交集以及上下调数量的二维信息。风格如下, 在Venn图中原数字位置添加了表示上下调基因数量的饼图 。外圈表示不同的分组,饼图则表示了交集/或特有区域中,所包含的上调(红色)和下调(绿色)基因数量。此外,如果交集处某基因在不同组中的上下调趋势不一致,则在灰色区域显示数量。

本节我们来学习如何在R语言中绘制这种特殊的Venn图。

示例数据“treat1_control.txt”、“treat2_control.txt”和“treat3_control.txt”分别为3种不同试验处理下的样品,与对照组相比后识别的显著差异表达基因。表中genes列为差异基因的名称,logFC列中将所有上调基因标识为1,所有下调基因标识为-1。

接下来绘制Venn图展示3组基因的交集概况,并同时将基因的上下调数量信息也表示出来。

使用R包GOplot,即可通过给定的数据绘制这种特殊的Venn图,同时展示基因交集以及上下调数量的二维信息。

这样这种Venn图组合饼图的样式就得到了。

右图Venn图的外圈表示数据中,3组处理组间相同/或特有的差异表达基因数量概况,具体的数值在饼图中展示,红色代表共有的上调基因,绿色代表共有的下调基因,灰色表示交集中在不同组中的上下调趋势不一致的基因。

对于各组交集具体涉及了哪些基因,它们的名称、上下调状态如何,将直接在面板中显示出来,如左图所示列表信息。

总之过程非常方便,很简单的一条命令,您get到了吗?