【R语言】——VennDiagram包绘制维恩图(保姆级教程)

365平台提现审核未通过 2025-07-14 08:25:11 admin 阅读 778

本期介绍利用VennDiagram包绘制绘制2-5元的维恩图

维恩图(Venn diagram),也叫文氏图、温氏图、韦恩图、范氏图,用于显示元素集合重叠区域的关系型图表,通过图形与图形之间的层叠关系,来反应数据集之间的相交关系。

当前R语言中的VennDiagram包可用于2元到5元的图维恩绘制,而大于5元的情况这需要借助R语言的另一个R包——UpsetR包(下期将做展示)。

1 数据准备

数据输入格式(xlsx格式):

2 R包加载及数据导入

#下载包#

install.packages("VennDiagram")

install.packages("openxlsx")

#加载包#

library (VennDiagram)

library(openxlsx)

#数值导入,可对数值进行配对

set1<-read.xlsx('C:/Rdata/jc/Venn.xlsx',sheet= "Sheet1",sep=',')

set2<-read.xlsx('C:/Rdata/jc/Venn.xlsx',sheet= "Sheet2",sep=',')

set3<-read.xlsx('C:/Rdata/jc/Venn.xlsx',sheet= "Sheet3",sep=',')

set4<-read.xlsx('C:/Rdata/jc/Venn.xlsx',sheet= "Sheet4",sep=',')

set5<-read.xlsx('C:/Rdata/jc/Venn.xlsx',sheet= "Sheet5",sep=',')

set6<-read.xlsx('C:/Rdata/jc/Venn.xlsx',sheet= "Sheet6",sep=',')

#数据转置,如果不转后头函数venn.diagram对矩阵数值不识别#

set1=t(set1)

set2=t(set2)

set3=t(set3)

set4=t(set4)

set5=t(set5)

set6=t(set6)

head(set)

#二元#

venn.diagram(x=list(set1,set2),

scaled = F, # 根据比例显示大小

alpha= 0.5, #透明度

lwd=1,lty=1,col=c('#FFFFCC','#CCFFFF'), #圆圈线条粗细、形状、颜色;1 实线, 2 虚线, blank无线条

label.col ='black' , # 数字颜色abel.col=c('#FFFFCC','#CCFFFF',......)根据不同颜色显示数值颜色

cex = 2, # 数字大小

fontface = "bold", # 字体粗细;加粗bold

fill=c('#FFFFCC','#CCFFFF'), # 填充色 配色https://www.58pic.com/

category.names = c("Set1", "Set2") , #标签名

cat.dist = 0.02, # 标签距离圆圈的远近

cat.pos = -180, # 标签相对于圆圈的角度cat.pos = c(-10, 10, 135)

cat.cex = 2, #标签字体大小

cat.fontface = "bold", # 标签字体加粗

cat.col='black' , #cat.col=c('#FFFFCC','#CCFFFF',.....)根据相应颜色改变标签颜色

cat.default.pos = "outer", # 标签位置, outer内;text 外

output=TRUE,

filename='C:/Rdata/jc/两组.png',# 文件保存

imagetype="png", # 类型(tiff png svg)

resolution = 400, # 分辨率

compression = "lzw"# 压缩算法

)

grid.draw(data)

图1 二元Venn

#三元#

venn.diagram(x=list(set1,set2,set3),

scaled = F, # 根据比例显示大小

alpha= 0.5, #透明度

lwd=1,lty=1,col=c('#FFFFCC','#CCFFFF',"#FFCCCC"), #圆圈线条粗细、形状、颜色;1 实线, 2 虚线, blank无线条

label.col ='black' , # 数字颜色abel.col=c('#FFFFCC','#CCFFFF',......)根据不同颜色显示数值颜色

cex = 2, # 数字大小

fontface = "bold", # 字体粗细;加粗bold

fill=c('#FFFFCC','#CCFFFF',"#FFCCCC"), # 填充色 配色https://www.58pic.com/

category.names = c("Set1", "Set2","Set3") , #标签名

cat.dist = 0.02, # 标签距离圆圈的远近

cat.pos = c(-120, -240, -180), # 标签相对于圆圈的角度cat.pos = c(-10, 10, 135)

cat.cex = 2, #标签字体大小

cat.fontface = "bold", # 标签字体加粗

cat.col='black' , #cat.col=c('#FFFFCC','#CCFFFF',.....)根据相应颜色改变标签颜色

cat.default.pos = "outer", # 标签位置, outer内;text 外

output=TRUE,

filename='C:/Rdata/jc/三组.png',# 文件保存

imagetype="png", # 类型(tiff png svg)

resolution = 400, # 分辨率

compression = "lzw"# 压缩算法

)

grid.draw(data)

图2 三元Venn

#四元#

venn.diagram(x=list(set1,set2,set3,set4),

scaled = F, # 根据比例显示大小

alpha= 0.5, #透明度

lwd=1,lty=1,col=c('#FFFFCC','#CCFFFF',"#FFCCCC","#CCCCFF"), #圆圈线条粗细、形状、颜色;1 实线, 2 虚线, blank无线条

label.col ='black' , # 数字颜色abel.col=c('#FFFFCC','#CCFFFF',......)根据不同颜色显示数值颜色

cex = 2, # 数字大小

fontface = "bold", # 字体粗细;加粗bold

fill=c('#FFFFCC','#CCFFFF',"#FFCCCC","#CCCCFF"), # 填充色 配色https://www.58pic.com/

category.names = c("Set1", "Set2","Set3","Set4") , #标签名

cat.dist = c(0.2, 0.2, 0.1, 0.1), # 标签距离圆圈的远近

cat.pos = c(-20, 20, -20, 20), # 标签相对于圆圈的角度cat.pos = c(-10, 10, 135)

cat.cex = 2, #标签字体大小

cat.fontface = "bold", # 标签字体加粗

cat.col=c('#FFFFCC','#CCFFFF',"#FFCCCC","#CCCCFF"), #cat.col=c('#FFFFCC','#CCFFFF',.....)根据相应颜色改变标签颜色

cat.default.pos = "outer", # 标签位置, outer内;text 外

output=TRUE,

filename='C:/Rdata/jc/四组.png',# 文件保存

imagetype="png", # 类型(tiff png svg)

resolution = 400, # 分辨率

compression = "lzw"# 压缩算法

)

grid.draw(data)

图4 四元Venn

#五元#

venn.diagram(x=list(set1,set2,set3,set4,set5),

scaled = F, # 根据比例显示大小

alpha= 0.5, #透明度

lwd=1,lty=1,col=c('#FFFFCC','#CCFFFF',"#FFCCCC","#CCCCFF", "#CCFFCC"), #圆圈线条粗细、形状、颜色;1 实线, 2 虚线, blank无线条

label.col ='black' , # 数字颜色abel.col=c('#FFFFCC','#CCFFFF',......)根据不同颜色显示数值颜色

cex = 2, # 数字大小

fontface = "bold", # 字体粗细;加粗bold

fill=c('#FFFFCC','#CCFFFF',"#FFCCCC","#CCCCFF", "#CCFFCC"), # 填充色 配色https://www.58pic.com/

category.names = c("Set1", "Set2","Set3","Set4","Set5") , #标签名

cat.dist = c(0.2, 0.2, 0.2, 0.2, 0.2), # 标签距离圆圈的远近

cat.pos = c(0, -10, 240, 120, 20), # 标签相对于圆圈的角度cat.pos = c(-10, 10, 135)

cat.cex = 2, #标签字体大小

cat.fontface = "bold", # 标签字体加粗

cat.col=c('#FFFFCC','#CCFFFF',"#FFCCCC","#CCCCFF", "#CCFFCC"), #cat.col=c('#FFFFCC','#CCFFFF',.....)根据相应颜色改变标签颜色

cat.default.pos = "outer", # 标签位置, outer内;text 外

output=TRUE,

filename='C:/Rdata/jc/五组.png',# 文件保存

imagetype="png", # 类型(tiff png svg)

resolution = 400, # 分辨率

compression = "lzw"# 压缩算法

)

grid.draw(data)

图4 五元Venn

#总结#

install.packages("VennDiagram")

install.packages("openxlsx")

library (VennDiagram)

library(openxlsx)

#数值导入,可对数值进行配对

set1<-read.xlsx('C:/Rdata/jc/Venn1.xlsx',sheet= "Sheet1",sep=',')

set2<-read.xlsx('C:/Rdata/jc/Venn1.xlsx',sheet= "Sheet2",sep=',')

set3<-read.xlsx('C:/Rdata/jc/Venn1.xlsx',sheet= "Sheet3",sep=',')

set4<-read.xlsx('C:/Rdata/jc/Venn1.xlsx',sheet= "Sheet4",sep=',')

set5<-read.xlsx('C:/Rdata/jc/Venn1.xlsx',sheet= "Sheet5",sep=',')

set6<-read.xlsx('C:/Rdata/jc/Venn1.xlsx',sheet= "Sheet6",sep=',')

#数据转置,如果不转后头函数venn.diagram对矩阵数值不识别#

set1=t(set1)

set2=t(set2)

set3=t(set3)

set4=t(set4)

set5=t(set5)

set6=t(set6)

#全部代码注释#

venn.diagram(x=list(set1,set2,....),

scaled = F, # 根据比例显示大小

alpha= 0.5, #透明度

lwd=1,lty=1,col=c('#FFFFCC','#CCFFFF'), #圆圈线条粗细、形状、颜色;1 实线, 2 虚线, blank无线条

label.col ='black' , # 数字颜色abel.col=c('#FFFFCC','#CCFFFF',......)根据不同颜色显示数值颜色

cex = 2, # 数字大小

fontface = "bold", # 字体粗细;加粗bold

fontfamily = "Times New Roma", # 字体

fill=c('#FFFFCC','#CCFFFF'), # 填充色 配色https://www.58pic.com/

category.names = c("Set1", "Set2") , #标签名

cat.dist = 0.02, # 标签距离圆圈的远近

cat.pos = -180, # 标签相对于圆圈的角度cat.pos = c(-10, 10, 135)

cat.cex = 2, #标签字体大小

cat.fontface = "bold", # 标签字体加粗

cat.col='black' , #cat.col=c('#FFFFCC','#CCFFFF',.....)根据相应颜色改变标签颜色

cat.default.pos = "outer", # 标签位置, outer内;text 外

cat.fontfamily = "Times New Roma", # 字体

xrotation = 2, # 1 2 3 旋转确定大打头数据集

filename='C:/Rdata/jc/两组.png',# 文件保存

output=TRUE,

imagetype="png", # 类型(tiff png svg)

resolution = 400, # 分辨率

compression = "lzw", # 压缩算法

ext.text = T # 增加指示线和标签

ext.percent = c(0.1,0.1,0.1), # 出现指示线和标签的条件

ext.dist = c(0.01,0.01),

ext.length = 0.8)

)

grid.draw(data)

好了本次分享就到这里。

关注公众号,发送“Venn”获得完整代码以及演示数据包

相关文章

办残疾人证、申领补贴,不出门就能办!

基本字义解释

盘点世界杯惊天冷门 阿根廷输沙特算什么档次?

固定资产如何计提折旧?这几个折旧小方法必备!