R语言嵌套韦恩图组合值计算及5层嵌套绘制技术问询
解决5层嵌套韦恩图的组合值计算与绘制问题
哥们,我明白你的需求了——你要做的是完全嵌套的5层韦恩图(每层都完全包含内层所有圈),之前三层的逻辑是对的,现在扩展到5层,核心是搞清楚完全嵌套集合的交集规则:任意几个集合的交集,等于其中最内层(数值最小)的那个集合的大小。
一、先理清楚你的层级数值对应关系
从内到外的5层数值如下:
- 第1层(最内层):579
- 第2层:579+400=979
- 第3层:979+192=1171
- 第4层:1171+52=1223
- 第5层(最外层):1223+11=1234
对应到draw.quintuple.venn的参数命名,我们把最外层设为area1,最内层设为area5(这样符合你之前三层的参数逻辑):
- area1=1234(第5层)、area2=1223(第4层)、area3=1171(第3层)、area4=979(第2层)、area5=579(第1层)
二、推导所有交集参数
因为是完全嵌套(内层集合完全包含在所有外层集合里),所以:
- 两两交集:任意两个集合的交集 = 数值较小的那个集合的大小
比如n12=1223(area2的大小,因为第4层完全在第5层里),n23=1171(area3的大小),以此类推。 - 三三/四四/五五交集:任意多个集合的交集 = 其中最内层集合的大小
比如n123=1171(area3的大小),n1234=979(area4的大小),n12345=579(最内层数值)。
三、完整可运行代码
# 加载VennDiagram包 library(VennDiagram) # 定义各层面积(从外到内) area1 <- 1234 # 第5层(最外层) area2 <- 1223 # 第4层 area3 <- 1171 # 第3层 area4 <- 979 # 第2层 area5 <- 579 # 第1层(最内层) # 两两交集参数 n12 <- 1223 n13 <- 1171 n14 <- 979 n15 <- 579 n23 <- 1171 n24 <- 979 n25 <- 579 n34 <- 979 n35 <- 579 n45 <- 579 # 三三交集参数 n123 <- 1171 n124 <- 979 n125 <- 579 n134 <- 979 n135 <- 579 n145 <- 579 n234 <- 979 n235 <- 579 n245 <- 579 n345 <- 579 # 四四交集参数 n1234 <- 979 n1235 <- 579 n1245 <- 579 n1345 <- 579 n2345 <- 579 # 五交集参数 n12345 <- 579 # 绘制5层嵌套韦恩图(可自定义样式) venn.plot <- draw.quintuple.venn( area1 = area1, area2 = area2, area3 = area3, area4 = area4, area5 = area5, n12 = n12, n13 = n13, n14 = n14, n15 = n15, n23 = n23, n24 = n24, n25 = n25, n34 = n34, n35 = n35, n45 = n45, n123 = n123, n124 = n124, n125 = n125, n134 = n134, n135 = n135, n145 = n145, n234 = n234, n235 = n235, n245 = n245, n345 = n345, n1234 = n1234, n1235 = n1235, n1245 = n1245, n1345 = n1345, n2345 = n2345, n12345 = n12345, # 自定义样式:填充色、边框宽度、文字大小等 fill = c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00"), lwd = 2, cex = 1.2, cat.cex = 1.2, cat.pos = c(-20, 20, 130, 230, 330), # 调整标签位置避免重叠 cat.dist = c(0.05, 0.05, 0.08, 0.08, 0.08) ) # 输出图形 grid.draw(venn.plot)
四、验证逻辑正确性
你可以核对每层的独有区域大小:
- 最外层(1234)独有部分:1234-1223=11(和你说的第五层增量一致)
- 第四层(1223)独有部分:1223-1171=52(和你说的第四层增量一致)
- 第三层(1171)独有部分:1171-979=192(和你说的第三层增量一致)
- 第二层(979)独有部分:979-579=400(和你说的第二层增量一致)
- 最内层(579)独有部分:579(完全独立区域)
所有数值完全匹配你的需求,运行代码后就能得到完美的5层嵌套韦恩图啦。
内容的提问来源于stack exchange,提问作者user9588528
相关产品推荐
相关产品推荐

