维恩图:也叫文氏图,用于显示元素集合重叠区域的图示。
本文展示2种方法:
- VennDiagram包
VennDiagram包的缺点是区域大小不能与实际对比一致
install.packages("VennDiagram")
library("VennDiagram")
Length_A <- 54.07
Length_B <- 38.86
Length_C <- 3.55
Length_AB <- 2.31
Length_BC <- 0.24
Length_AC <- 0.71
Length_ABC <- 0.07
require(VennDiagram)
venn.diagram(list(B = 1:1800, A = 1571:2020),fill = c("red", "green"),
alpha = c(0.5, 0.5), cex = 2,cat.fontface = 4,lty =2, fontfamily =3)
, filename = "trial2.png")
draw.triple.venn(area1=Length_A, area2=Length_B, area3=Length_C
,n12=Length_AB, n23=Length_BC, n13=Length_AC, n123=Length_ABC
,category = c('天猫','线下','京东')
,col=c('red','green','blue'),fill=c('red','green','blue')
,cat.col=c('red','green','blue')
,reverse = FALSE
,euler.d = TRUE
,scaled = TRUE
,cex = c(4,2,1,1,1,1,1)
)
- venneuler包
venneuler包的缺点是重叠比例标示需要自己添加
# install.packages('venneuler')
require(venneuler)
vd <- venneuler(c(A=0.3, B=0.3, C=1.1, "A&B"=0.1, "A&C"=0.2, "B&C"=0.1 ,"A&B&C"=0.1))
plot(vd)
自己添加标示:
require(venneuler)
vd <- venneuler(c(A=0.3, B=0.3, C=1.1, "A&B"=0.1, "A&C"=0.2, "B&C"=0.1 ,"A&B&C"=0.1))
vd$labels <- c(
paste(0.3+0.1+0.2+0.1, "\n", "京东"),
paste( "淘宝", "\n", 0.3+0.1+0.1+0.1),
paste(1.1+0.2+0.1+0.1, "\n", "线下")
)
txt_centers <- vd$centers
txt_centers <- rbind(colMeans(txt_centers[1:2,]), colMeans(txt_centers[c(1,3),]), colMeans(txt_centers[2:3,]), colMeans(txt_centers[1:3,]))
plot(vd)
txt <- c(0.1, 0.2, 0.1, 0.1)
sapply(1:4, function(i) text(txt_centers[i,1], txt_centers[i,2], txt[i]))