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
相关产品推荐
相关产品推荐

