You need to enable JavaScript to run this app. UpSetR自定义指定交集的upset图计数显示错误的解决方法
优惠活动
大模型
产品
解决方案
定价
更多

UpSetR自定义指定交集的upset图计数显示错误的解决方法

问题描述
  • 实验者持有A、B、C、D四组Ensembl基因ID构成的集合,最初使用UpSetR包的默认upset函数绘制交集图,后因需要重点展示A&B、A&C、A&D三组两两交集,自定义了intersections参数指定要显示的交集条目。
  • 实际绘图后发现图中展示的交集计数和手动计算结果不符:手动核算得A∩B元素数为4、A∩C为4、A∩D为3,但图中显示的对应数值远低于上述实际值。
计数失真的核心原因

很多使用UpSetR的用户都会踩这个统计逻辑的坑:

  • 你预期的交集计数是“两个集合的全量共同元素总数”,但UpSetR默认的统计规则是,算某一组交集(比如A&B)的元素时,只会计入仅属于这几个指定集合、不属于其他所有集合的元素。
  • 举个实际的例子:你手动算的A和B共有的4个基因里,有几个其实同时也在C或者D集合里存在。默认规则下,这部分跨组的基因不会被算进A&B的条目里,会被自动归到包含C/D的多集合交集分类中,最后你看到的A&B柱形高度自然就比实际值低。
调整方法

完全不用修改你已经整理好的原始集合数据,只要在原有代码里加一个关键参数,就能匹配你想要的统计逻辑:

  • 新增参数group.by = "all":这个参数会把统计规则改成,只要元素属于当前交集条目包含的所有集合,就会被计入该条目的计数,不会再把同时存在于其他未指定集合的元素排除出去。
  • 可选加参数empty.intersections = "omit":自动把计数为0的空交集条目藏起来,图面会更简洁。

可直接运行的调整后代码如下:

library(UpSetR)
# 原有集合列表无需修改
mine <- list("A" = A,
             "B" = B,
             "C" = C,
             "D" = D)

upset(
  fromList(mine),
  intersections = list(
    list("A"), list("B"), list("C"), list("D"),
    list("A", "B"),
    list("A", "C"),
    list("A", "D")
  ),
  group.by = "all", # 核心调整:统计全量共同元素,不排除跨组元素
  empty.intersections = "omit",
  keep.order = TRUE
)

调整完成后,图中A&B、A&C、A&D三个条目的计数会和手动计算的全量共同元素数完全一致,原有自定义的交集配置可以直接保留,不需要额外新增全集合共同交集的条目。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 01:27:06