vlambda博客
学习文章列表

R |- R语言简单的韦恩图

对于数据分析而言,尤其是做比较分析,韦恩图也是常见方法之一。在基因表达上下调分析中也有看到利用韦恩图表达的案例。这里就分享韦恩图在R语言的实现吧

目前在R语言中,了解到的用于绘制韦恩图的函数有Vennerable包以及VennDiagram包。这里就分别就这两个函数做简单的介绍吧。

首先是Vennerable
 1#加载程序包
2library(Vennerable)
3
4#创建26个字母组成的向量
5genename <- letters[1:26]
6
7#随机获取26个字母中的18个组成变量
8set.seed(500)
9group1 <- sample(genename,18)
10set.seed(501)
11group2 <- sample(genename,18)
12set.seed(502)
13group3 <- sample(genename,18)
14set.seed(503)
15group4 <- sample(genename,18)
16
17#建立4个向量组成的列表
18venndata <- list(group1,group2,group3,group4)
19
20#规定列表中各个向量的名称
21names(venndata)<-c("G1","G2","G3","G4")
22
23#进行韦恩图数量统计
24Vstem <- Venn(venndata[1:3])
25
26#韦恩图绘制1
27plot(Vstem,doWeights = FALSE, type = "circles",
28     show = list(SetLabels = TRUE, Faces = FALSE))
29#韦恩图的绘制,其中doWeights表示利用权重来确定韦恩图的面积
30#type表示类型,可以选择的类型有“circles”"squares""triangles""ChowRuskey"
31#FaceText表示韦恩图区域中的数值显示,可以是01组合的“signature”,123组合的“sets”以及不显示“na”。
32#SetLabels表示组名称G1 G2 G3
33#Face表示韦恩图区域的颜色填充
34
35#韦恩图绘制2
36plot(Vstem,doWeights = TRUE, type = "squares"
37     show = list(FaceText= "NA", SetLabels = FALSE, Faces = TRUE))R |- R语言简单的韦恩图


然后是VennDiagram
 1library(vegan)
2library (VennDiagram)
3#setwd("")
4#加载程序包
5genename <- letters[1:26]
6#创建26个字母组成的向量
7set.seed(500)
8group1 <- sample(genename,18)
9set.seed(501)
10group2 <- sample(genename,18)
11set.seed(502)
12group3 <- sample(genename,18)
13set.seed(503)
14group4 <- sample(genename,18)
15#随机获取26个字母中的18个组成变量
16
17venndata <- list(group1,group2,group3,group4)
18#组成列表list
19names(venndata)<-c("G1","G2","G3","G4")
20#建立4个向量组成的列表
21venn.diagram(venndata,
22             main = "Vennplot",
23             main.cex = 2,
24             main.fontface = 2,
25             fill=c(colors()[616], colors()[38], colors()[468],colors()[148]),
26             imagetype = "tiff",filename = "out.tiff")
27#filename表示输出的文件名
28#imagetype表示输出图形的格式,tiff, png, svg 等,默认tiff
29#main: 图形标题
30#main.cex表示标题字体的大小
31#main.fontface表示字体样式1为正体,2为斜体等
32#main.fontfamily表示字体
33#alpha表示区域的透明度
34#可以利用fill修改不同区块的颜色
35#导出图片的时候记得工作路径最好可以提前设置一下#setwd("")


在很多时候,其实对于数据的录入可能是0/1矩阵,而不是像上述两个案例一样直接是由c(A,B,C,D)这样组成的向量所构成的表格。如果是0/1矩阵组成的数据如何进行韦恩图绘制呢?
首先自然是需要将数据处理到能够被两个函数识别的数据,再进行图片的绘制,以下给出数据处理的案例吧,希望能够有用。
 1#创建26个字母组成的向量
2genename <- letters[1:26]
3
4#创建4个01组成的向量
5group1 <- rep(0:1, each=13)
6group2 <- rep(rep(0:1,1),13)
7group3 <- rep(rep(1:0,1),13)
8group4 <- rep(1,26)
9
10#组成0/1数据框
11venndata1 <- data.frame(group1,group2,group3,group4,row.names = genename)
12
13
14#========以下是数据整理===================#
15#提取行名
16spe<-rownames(venndata1)
17
18#提取列名
19site<-colnames(venndata1)
20
21#将数据框转为列表
22venndata.list<-as.list(venndata1)
23
24#将列表的名称命名为列名
25names(venndata.list)<-site
26
27#利用for循环将列中为1的行的行名提取出来
28for (i in 1:length(site)){
29  a<-venndata1[[i]]
30  b<-spe[a>0]
31  venndata.list[[i]]<-b
32}
33
34#加载程序包
35library(Vennerable)
36
37#进行韦恩图制作前的数据统计
38Vstem <- Venn(venndata.list)
39
40#绘制图形
41plot(Vstem,doWeights = FALSE, type = "squares"
42     show = list(SetLabels = FALSE, Faces = FALSE))

最后附一张山上偶遇的蜥蜴图吧

如果有任何错误还请指出来哦~