本期介绍利用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”获得完整代码以及演示数据包