首页 > 科研绘图 > R语言专辑一 韦恩图如何走向新生?最全韦恩图整理
2022
04-28

R语言专辑一 韦恩图如何走向新生?最全韦恩图整理

韦恩图(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或韦恩网络图。

转自:百迈克生物



最后编辑:
作者:萌小白
一个热爱网络的青年!

发布评论

表情