【1.8】VennDiagram做文氏图

通过不同方法,对于不同的研究对象,你可能得到不同的列表。比如不同表达模式的基因,不同矿物的组分,以及不同特征的人群……接下来,你可能希望把它们用集合的形式显示出来,看看各部分的交集,以及哪些类别较多。最简单的方法是用PPT画出不同的圈圈,然后标上数字。如果想让不同交集的尺寸随着数字的大小而调整,可能需要花上一点功夫。 这里有一个一劳永逸的方法(VennDiagram package),轻松获得和高水平文章上类似的Venn(维恩)图。

install.packages("VennDiagram”)
library(VennDiagram)
Loading required package: grid
Warning message:
package 'VennDiagram' was built under R version 2.13.0

x <- c(1,3,5,7,9,11,17,19,21,23,25,29,31,33,37,39,41,47,49,51,57,59);
y <- c(1,3,5,7,13,17,19,21,23,25,27,29,31,33,45,47,51);
z <- c(1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,55,57,59,61);

venn.diagram(list(X=x,Y=y,Z=z),fill=c("red","blue","yellow"),"out.tiff")

[1] 1

输出1表示画图成功,生成的结果是out.tiff,这个文件在你的R工作目录下。

或者修改作图中的部分参数:

venn.diagram(list(X=x,Y=y,Z=z),fill=c("red","green","blue"),alpha=c(0.5,0.5,0.5),cex=2, cat.fontface=4, fontfamily=3, filename="VennDiagram.tiff")

另外附一个在线画Venn图的网站:

http://bioinfogp.cnb.csic.es/tools/venny/index.html

从上面的例子可以看出函数venn.diagram是利用集合作为参数绘制韦恩图的,但是有时候我们并不知道各个集合都包含什么元素,而只知道集合及相互之间交集的大小,这个时候如何绘制韦恩图呢?包VennDiagram还给我们提供了另外几个函数:绘制两个集合的韦恩图的draw.pairwise.venn,三个集合的draw.triple.venn,四个、五个集合的draw.quad.venn、draw.quintuple.venn。我们此处只介绍前两个函数的用法。

A = 1:150
B = c(121:170,300:320)
C = c(20:40,141:200)
Length_A<-length(A)
Length_B<-length(B)
Length_C<-length(C)
Length_AB<-length(intersect(A,B))
Length_BC<-length(intersect(B,C))
Length_AC<-length(intersect(A,C))
Length_ABC<-length(intersect(intersect(A,B),C))

利用函数draw.pairwise.venn绘制两个集合的韦恩图:

draw.pairwise.venn(area1=Length_A,area2=Length_B,cross.area=Length_AB
,category=c('A','B'),lwd=rep(1,1),lty=rep(2,2)
,col=c('red','green'),fill=c('red','green')
,cat.col=c('red','green')
,rotation.degree=90)

其中area1指第一个集合的大小,area2指第二个集合的大小,而cross.area则指交集的大小。参数category用于指定集合名称。其余参数与venn.diagram相同。

利用函数draw.triple.venn绘制三个集合的韦恩图:

draw.triple.venn(area1=Length_A, area2=Length_B, area3=Length_C
,n12=Length_AB, n23=Length_BC, n13=Length_AC, n123=Length_ABC
,category = c('A','B','C')
,col=c('red','green','blue'),fill=c('red','green','blue')
,cat.col=c('red','green','blue')
,reverse = FALSE)

同draw.pairwise.venn类似,area1、area2、area3分别指第一个、第二个、第三个集合的大小。n12表示第一个与第二个集合的交集大小,n23、n13也是类似,n123指三个集合的交集大小。reverse则指是否对图形进行反转。

参考资料:

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学