使用 eulerr 的精确维恩图

Accurate Venn diagrams using eulerr

我正在尝试使用 eulerr 包来创建维恩图。我有 2 个列表,我想用它们来创建维恩图。列表中的 1 个是第一个列表的子集。奇怪的是,eulerr 似乎认为 list

中存在一个值
b

这是该子集所独有的。我似乎无法弄清楚它认为哪些值是独一无二的。

https://pastebin.com/J7tPcfAt

> length(a)
[1] 3278

> length(b)
[1] 1318

当我检查子集之间的重叠时,我得到了预期的结果:

> length(which(a %in% b))
[1] 1318

> length(which((b %in% a)))
[1] 1318

> length(which(!(b %in% a)))
[1] 0

> length(which(!(a %in% b)))
[1] 1960

但是当我使用 eulerr 绘制维恩图时,我得到:

library(eulerr)
fit <- euler(list("A" = a, "B" = b))
plot(fit, counts = TRUE)

值得注意的是,eulerr 认为 A 独有的值的数量比我使用

得到的值长一个
length(which(!(a %in b)))

如果能帮助理解此行为,我们将不胜感激!

我发现了导致此行为的原因,但无法解释原因。这是因为ab都有重复的值,而且是同一个值

> a[duplicated(a)]
[1] "Crybg3"
> b[duplicated(b)]
[1] "Crybg3"

如果我从两个向量中删除这个值,它就会起作用。

a1 <- a[!duplicated(a)]
b1 <- b[!duplicated(b)]

fit <- euler(list("A" = a1, "B" = b1))
plot(fit, counts = TRUE)

> fit
    original fitted residuals region_error
A       1960   1960         0            0
B          0      0         0            0
A&B     1317   1317         0            0

diag_error:  0 
stress:      0