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

R语言eulerr包绘制4维欧拉图出现分组嵌套错误求助

解决eulerr包中4维欧拉图Spa_gl被包含在Elav_gl内的问题

问题原因

你的数据中,Elav_gl与Spa_gl的重叠区域占比极高:两者的独立交集(614)加上三者、四者交集后,总重叠量远超Spa_gl的单独部分(368)。eulerr的拟合算法为了最小化几何误差,会选择将Spa_gl绘制在Elav_gl内部作为最优近似,但这不符合你对“各分组均有唯一占比”的展示需求。

修复方法

可以通过添加约束条件强制算法不将Spa_gl置于Elav_gl内部,同时调整拟合参数提升精度:

library(eulerr)

glvenn_d <- c("Ato_gl" = 644, "Elav_gl" = 467, "Spa_gl" = 368,
              "gl_RNA_Seq" = 723, "Ato_gl&Elav_gl" = 343, "Ato_gl&Spa_gl" = 258, 
              "Ato_gl&gl_RNA_Seq" = 37, "Elav_gl&Spa_gl" = 614, 
              "Elav_gl&gl_RNA_Seq" = 71, "Spa_gl&gl_RNA_Seq" = 39, 
              "Ato_gl&Elav_gl&Spa_gl" = 372, "Ato_gl&Elav_gl&gl_RNA_Seq" = 42, 
              "Ato_gl&Spa_gl&gl_RNA_Seq" = 26, "Elav_gl&Spa_gl&gl_RNA_Seq" = 69, 
              "Ato_gl&Elav_gl&Spa_gl&gl_RNA_Seq" = 37)

# 添加约束:强制Spa_gl不被Elav_gl包含,使用椭圆形状并提升拟合精度
glvd <- euler(glvenn_d, 
              shape = "ellipse",
              constraints = list(list(relation = "not_inside", sets = c("Spa_gl", "Elav_gl"))),
              tol = 1e-8,  # 减小误差容忍度
              method = "grid")  # 使用网格搜索寻找更优初始值

plot(glvd)

额外说明

如果上述调整后仍有偏差,可以尝试:

  • 增大n参数(默认100)增加迭代次数,比如n = 500
  • 检查数据的逻辑合理性:虽然你核对过数据,但Elav_gl与Spa_gl的交集(614)大于Elav_gl的单独部分(467),这种极端重叠本身就很难用欧拉图完美呈现,若需严格展示各独立区域,可考虑改用韦恩图(如VennDiagram包)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:57:37