R语言绘图包07--多集合可视化UpSetR

Python019

R语言绘图包07--多集合可视化UpSetR,第1张

R语言绘图包系列:

一般在对数据取交集的时候,通常使用 韦恩图 。但韦恩图的可视范围有限,对于超过五个以上的数据集取交集会显得很凌乱。这时候就可以使用UpSetR包。

我们还能在图中描述出1970-1980年恐怖片和动作片的情况

通过 attribute.plots 参数添加属性图

参考: https://www.jianshu.com/p/324aae3d5ea4

https://mp.weixin.qq.com/s/DSyaje-nFb8o--kuzmTvaA

对于集合的可视化,第一时间想到的都是韦恩图(venn diagram),一般集合不超过5个的时候,可视化效果还是不错的

但是一旦数据集增加,比如说五个的时候,你就很难从图中解读出想要的信息了。

即便你把它画的很美观,如下图那样,还是还是很难直观找到自己需要的信息。可视化的目的不是炫技,而是快速理解数据。

还好R语言里新增了一个集合可视化 神包 --UpSetR。它可视化的结果的基础版本长下面这个样子:

上述是分析了不同电影的所属类型得到的结果。在我不告诉你任何图示信息的情况下,请思考下那种电影类型拍的最多,然后哪两种电影电影类型拍的最少。

基本上我不用过多和你解释图示,你也能很快的找到答案。图中黑色表示该位置有数据,灰色的点表示没有。不同点连线表示存在交集。具体数据可以看上面的条形图。不同类型的数据的总量看左边的条形图。

UpSetR是一个R包,这意味着你可以简单通过一行命令就能安装

UpsetR接受三种类型的数据输入:

光看文字肯定是不懂的,所以直接实战把

我们用UpSetR提供的测试数据作为演示

看下数据长什么样子

Name是不同的电影,然后不同发布时间,后面接着电影跟随的类型。

绘图用的 upset 函数:

稍微解释一下参数

更有意思的是,我们还能在图中描述出1970-1980年恐怖片和剧情片的情况

这里必须介绍一个神奇的参数 queries :

此外还有一个参数叫做 attribute.plots 能够添加在upset的结果图中加入属性图。

这个 attribute.plots 接受各个plot函数组成的作图函数,可以用自带的,也可以自己写,只要保证里面的参数设置正确了。

其他参数就不继续演示了,因为我懒。

集合交集向量长下面这个样子

输入格式一目了然,然后数据可以用 fromExpression 进行转换

转换后的数据就可以拿去用upset作图了

我们可以对ChIP-Seq分析得到的peak进行注释

然后就可以用upsetplot画画了,太简单了。

下一期写一篇Y叔的 upsetplot 是如何写的。

韦恩图(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