You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用eulerr绘制比例韦恩图时缺失A&C交集的问题求助

解决eulerr绘制比例韦恩图时A&C交集缺失的问题

首先确认你的数据逻辑:从给出的数值来看,应该是指不相交区域的大小(仅A、仅B、仅C、仅A&B、仅A&C、仅B&C、仅A&B&C),如果是总集合大小的话,A=9但A&B=28明显违反集合论(交集不能大于单个集合的大小),这点先确认清楚。

问题原因

eulerr的比例韦恩图基于近似拟合算法生成,当某个交集区域的尺寸远小于其他区域时(比如你的A&C交集仅为1,对比A&B的28、A&B&C的25),再加上C本身没有单独元素(C=0),算法在保持整体比例的前提下,可能无法画出足够明显的A&C交集区域,甚至会因空间限制忽略这个极小区域。

解决方案

1. 优化eulerr的拟合精度

调整euler()函数的拟合控制参数,让算法更精准捕捉小区域:

library(eulerr)

sizes <- c(A = 9, B = 2, C = 0, "A&B" = 28, "B&C" = 4, "A&C" = 1, "A&B&C" = 25)

# 提高拟合迭代次数和精度
fit <- euler(sizes, control = list(iter.max = 10000, rel.tol = 1e-10))
# 绘图时添加区域数值标签,明确显示A&C的数值
plot(fit,
     fills = c("yellow", "skyblue", "deeppink"),
     labels = sizes)

2. 换用VennDiagram包绘制精确韦恩图

如果eulerr的近似拟合仍无法满足需求,可以使用VennDiagram包,它能强制显示所有交集区域,即使尺寸很小:

library(VennDiagram)

# 根据不相交区域计算总集合和交集的总大小
A_total <- 9 + 28 + 1 + 25
B_total <- 2 + 28 + 4 + 25
C_total <- 0 + 1 + 4 + 25
AB_total <- 28 + 25
AC_total <- 1 + 25
BC_total <- 4 + 25
ABC_total <- 25

draw.triple.venn(
    area1 = A_total,
    area2 = B_total,
    area3 = C_total,
    n12 = AB_total,
    n13 = AC_total,
    n23 = BC_total,
    n123 = ABC_total,
    fill = c("yellow", "skyblue", "deeppink"),
    category = c("A", "B", "C"),
    print.mode = c("raw", "percent") # 显示原始数值和百分比
)

3. 调整图形显示参数

如果坚持使用eulerr,还可以通过以下方式突出小区域:

  • 增大绘图尺寸,比如在RStudio中放大绘图窗口,或者用pdf()等函数输出高分辨率图形;
  • 保留默认的shape = "ellipse"参数(椭圆是最灵活的形状选项),尝试调整图形的布局参数。

额外提醒

如果你的数据实际是总集合大小(而非不相交区域),当前数据存在逻辑错误:A的总大小9小于A&B的交集28,不符合集合论,必须修正数据后再绘图。

内容的提问来源于stack exchange,提问作者user26384605

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:31:02