如何在三元韦恩图中启用缩放?负面积报错问题求助
三元韦恩图负面积报错解决及缩放方法
负面积报错原因与修复
你遇到的负面积报错,核心是参数逻辑冲突:draw.triple.venn里的n12是集合1和2的总交集(包含三者共同部分),n123是三者的共同交集,必须满足n12 ≥ n123、n13 ≥n123、n23≥n123,否则计算仅两两交集的区域会出现负数。
看你的数据:n12=2,n123=140,2<140,算出来仅1和2的交集是2-140=-138,这显然不符合逻辑,直接触发报错。
修正思路:先理清楚实际数据含义,调整参数:
- 如果
n12是仅1和2的交集(不含三者共同部分),那总交集应该是仅两两交集 + 三者共同交集,也就是把代码里的n12改成140+2=142,n13改成140+8=148,n23改成140+26=166。 - 修正后检查所有区域:
- 仅1的区域:153 - (142-140) - (148-140) -140 =3 ≥0
- 仅2的区域:173 - (142-140) - (166-140) -140=5 ≥0
- 仅3的区域:224 - (148-140) - (166-140) -140=50 ≥0
所有区域均为非负,不会再报错。
缩放方法
- 基础缩放:
scaled=TRUE已经会让圆的大小和集合面积成正比,还可以通过height和width参数控制整体绘图尺寸(单位为英寸,按需调整)。 - 区域缩放:如果用grid系统,可在
grid.newpage()后添加pushViewport(viewport(width=0.8, height=0.8)),将整个图缩放至原大小的80%(数值可调整)。
修正后带缩放的示例代码
library(VennDiagram) grid.newpage() # 可选:调整绘图区域缩放比例 pushViewport(viewport(width=0.9, height=0.9)) draw.triple.venn( area1 = 153, area2 = 173, area3 = 224, n12 = 142, n23 = 166, n13 = 148, n123 = 140, col = "red", fill = c("pink", "green", "orange"), scaled = TRUE, height = 8, width = 8 )
内容的提问来源于stack exchange,提问作者Lara
相关产品推荐
相关产品推荐

