R语言专辑一 韦恩图如何走向新生?最全韦恩图整理
卖萌控的博客
点击这里进入电脑版页面!体验更好
R语言专辑一 韦恩图如何走向新生?最全韦恩图整理
2022-4-28 萌小白


韦恩图(Venn
diagram),也叫维恩图、文氏图、温氏图等。即数学中的集合。目前韦恩图软件眼花缭乱,但选择一款适合自己的并非易事,毕竟要求和眼界也是越来越高,面对各式各样的R包,想找出符合自己要求的图更是难以抉择。本文主要介绍12个R语言中的韦恩图软件绘制,让您绘制心目中的韦恩图不再困难。



1



vennnetwork韦恩网络图































点评:该包暂时未开源,为百迈客云研发独有。韦恩网络图对每个交集均得到展示且保留了源交集信息。而且比较美观。



2



venneuler包



vd <- venneuler(c(A=0.3, B=0.3, C=1.1, "A&B"=0, "A&C"=0.2, "B&C"=0.1,"A&B&C"=0.1))



plot(vd)






点评:增加了权重大小设置,即图形大小跟着数值变动,但是输入需要提前计算好,且图形无法显示数值,需要额外text。包安装可能容易报错,亦可弃之。



Package:https://mirrors.sjtug.sjtu.edu.cn/cran/web/packages/venneuler/index.html



3



eulerr包



genes <-euler(c("SE"=13, "Treat"=28, "Anti-CCP"=101, "DAS28"=91,



"SE&Treat"=1, "SE&DAS28"=14, "Treat&Anti-CCP"=6, "SE&Anti-CCP&DAS28"=1))



plot(genes, quantities =list(type =c("percent", "counts")))



















点评:可以显示数值或比例,设置权重,且可以自定义边框和颜色等;但有时数据不好,圈圈分离比较乱,影响美观;且如果需要同大小圈圈时,可能比较难调整。有类似的需要可以选取,否则可弃之。



官方示例:https://cran.r-project.org/web/packages/eulerr/vignettes/gallery.html



Package:https://cran.r-project.org/web/packages/eulerr/index.html



4



venn包



Venn的包在一段时期使用量比较高,其输入支持多种格式,比如常见的list型,dataframe等,哪怕单纯输入一个维度数字就可以出图,易上手,而且早期使用较多,作者还出了6维和7维的韦恩图,着实小小的惊艳了一下。



venn::venn(list(A=1:5,B=2:8,C=4:12),zcolor= 2:4,box=F,sncs=2,ilcs=1.5)



venn(7,zcolor=2:7,box=F)



venn(6,zcolor=2:3)
























点评:入手容易,输入灵活,基本符合所需。但是venn=2的时候,上下留白太多,影响图片美观,暂列为次选。



5



VennDiagram包 (常用)



VennDiagram包目前仍是使用量最多的韦恩图包,没有之一,也是被人推荐次数最多的包。基本上把能用到的参数都外置,让使用者更多的是自定义自己的图形。



venn.diagram(list(AA=sample(1:100,70),PPP=sample(1:100,10)),



imagetype= "tiff", alpha=c(0.5,0.5),



fill=c("red","yellow"), cat.fontface=4,fontfamily=2,



main.cex= 2, main.fontface= 2, main.fontfamily= 2,



filename= "VennDiagram.tif",scaled=T)









































此包的参数较多,为了更加灵活自定义自己图形:



resolution: 输出图形的清晰度,DPI数值;



imagetype: 输出图形的格式,tiff, png, jpeg,svg 等;



alpha: 设置每个区块的透明度;



main.fontface: title字体样式,比如斜体,粗体;



main.fontfamily: title字体,比如Time New Roman;



cat.fontfamily:= 标签字体,例如"serif"表示新罗马;



cat.fontface:标签字体样式,例如"bold"表示粗体;



cat.col :标签颜色设置;



cat.cex :标签大小;



cat.pos:设置标签位置;



fill:圈圈颜色;



col:圈圈border颜色;



euler.d or scaled:借用eulerr包的样式绘制,即可以调整是否权重设置。



点评:此包的出现,在相当长时间使用量急剧增加,样式多变,输入灵活,每个点线均可自定义设置。为韦恩图2-5维的首选,但权重绘制时,借鉴了eluer,可作为优选。



Package:https://mirrors.sjtug.sjtu.edu.cn/cran/web/packages/VennDiagram/index.html



6



ggVennDiagram包,韦恩热图 (进阶版)



genes <- paste("gene",1:1000,sep="")



x <- list(A=sample(genes,300),



B=sample(genes,525),



C=sample(genes,440),



D=sample(genes,350))



library(ggplot2)



ggVennDiagram(x) + scale_fill_gradient(low="blue",high= "red")
























点评:



1,支持2-7维的韦恩图绘制;



3, 因是ggplot2的拓展包,因此支持ggplot2的其他语法设置;



4, show_intersect=T时,可输出为交互式html,此时可点击数值显示源数据。



亦可作为优选。



Package:https://cran.r-project.org/web/packages/ggVennDiagram/index.html



7



upsetR包,upset图



upset图,基本上属于第一批更换传统韦恩图样式的图,对传统的韦恩图5维以上的眼花缭乱,upset图更加的简洁易懂,让人眼前一亮。



movies <- read.csv( system.file("extdata", "movies.csv", package = "UpSetR"), header=T, sep=";" )



mutations <- read.csv(system.file("extdata", "mutations.csv", package= "UpSetR"), header=T, sep= ",")



upset(movies,attribute.plots=list(gridrows=60,plots=list(list(plot=scatter_plot, x="ReleaseDate", y="AvgRating"),list(plot=scatter_plot, x="ReleaseDate",y="Watches"),list(plot=scatter_plot, x="Watches", y="AvgRating"),list(plot=histogram, x="ReleaseDate")), ncols= 2))






点评:upset图相当于把每个交集块变成了柱子,简单易懂,也能从中看出不同集合的分布。同时此包可以对数据统计做出散点图、箱线图、直方图等多种统计图形展示,当然默认单纯的upset图使用的最多。



Package:devtools::install_github("hms-dbmi/UpSetR")



8



VennDetail包,韦恩图+韦恩条形图+韦恩饼图+upset图



library(VennDetail)



A <-sample(1:1000, 400, replace = FALSE)



B <- sample(1:1000, 600, replace = FALSE)



C <- sample(1:1000, 350, replace = FALSE)



D <- sample(1:1000, 550, replace =FALSE)



res <-venndetail(list(A = A, B = B, C = C, D = D))



result <- result(res)



plot(res)



















点评:plot通过type参数来控制输出的类型(vennpie,upset等),默认为传统的韦恩图绘制,增加了类条形图的展示,同时调用了upsetR包绘制upset图,即更丰富了韦恩图的不同展示方式。大于5维韦恩图的首选。



Package:devtools::install_github("guokai8/VennDetail") # Or BiocManager::install("VennDetail")



9



花瓣图,ggplot or plotrix变相绘制



library(tidyverse)



library(ggplot2)



df<-data.frame(x=LETTERS[1:10],y=sample(1:20,10))



x<-1:180



y<-sin(10*x*pi/180)



df1<-data.frame(x1=x,y1=abs(y),var=gl(10,18,labels= LETTERS[1:10]))



merge(df1,df,by.x= 'var',by.y= 'x') %>%



mutate(new_y=y1*y) -> df2



ggplot(data=df2,aes(x=x,y=new_y))+



geom_area(aes(fill=var),



alpha=0.8,



color="black",



show.legend= F)+



coord_polar+theme_bw+



theme(axis.text.y= element_blank,



axis.ticks= element_blank,



panel.border= element_blank,



axis.title= element_blank)+



scale_x_continuous(breaks= seq(9,180,18),



labels= df$x)+



geom_text(data=df,aes(x=seq(9,180,18),



y=y+1,



label=y))



















点评:目前未找到单纯的包来做花瓣图,但是可以搜索到不少写好的函数可以做,毕竟花瓣图相当于根据绘制数目得到多边形角度,然后绘制椭圆。花瓣图适合更多样品之间的韦恩图绘制,此时花瓣图丢失了更多的信息



10



ggClusterNet网络韦恩图 (进阶版)



韦恩图的又一变种,网络韦恩图。






点评:网络图,可以将每个样品的具体基因或者物种等因子全部展示出来,更多的保留了原来的所有信息。此包其实类似与花瓣图的展示方式,丢失了统计信息,但是可以设置具体的因子信息。当然此包的优势在于其他网络图的上。



Package:devtools::install_github("taowenmicro/ggClusterNet")



11



limma包,vennDiagram函数



点评:这个包基本上可以略过,主要功能也不是为了绘制韦恩图,需要输入计算分类好的0-1矩阵。



12



gplots包,venn函数



点评:很简洁的韦恩图绘制,无法设置颜色,很单调。亦可忽略。



以上为目前搜集到的所有R包绘制维恩图方式,当然存在更多的方式绘制,比如ggvenn包,样式都是殊途同归,一切都在探索中、更新中。



综 述



韦恩图2-5维度,优选VennDiagram包或ggVennDiagram包,5-10维可选择upsetR包,大于10维考虑花瓣图,即网络上可找到的flower_plot函数。若需要其他变种,可以考虑VennDetail或韦恩网络图。



转自:百迈克生物



发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容