什么时候用它
韦恩图回答的是成员资格的重叠:哪些元素只在 A,哪些同时在 A 和 B,哪些三个集合都有。典型输入是三份基因、蛋白、通路或病例 ID 列表;每个元素只有“在/不在”两种状态,不带权重。
它最适合 2–3 个集合。集合一多,区域数按 (2^n-1) 增长:4 个集合已经有 15 个可能区域,5 个有 31 个。圆还能画出来,不等于人还能读出来。四个以上集合通常换 UpSet 图:交集组合排在共同基线上的柱子上,既能排序,也能精确比较。
别把它拿来表达下面几件事:
- 集合之间的流动。 “筛选前 → 筛选后”是流向,应该画桑基图或流程图。
- 每个元素的强弱。 log2 fold change、表达量、权重进不了圆的面积;韦恩图只知道成员在不在。
- 精确比较集合大小。 常见实现里的圆不是按数量成比例画的。要比较 58 和 50 谁大多少,看数字或另画条形图。
怎么读
- 先看集合总数。 这决定每个圆代表多大的候选池,也能暴露某个列表是不是因为阈值更宽而格外大。
- 再看最中间。 三圆共同区域是最严格的共识,但“更可信”要由研究设计决定,不能只凭它重叠次数最多。
- 沿着一个圆向外读。 例如 RNA-seq 圆里依次有 RNA-seq 独有、与 ATAC-seq 共有、与 Proteomics 共有、三者共有;这四块相加才是 RNA-seq 的总数。
- 把区域数字当答案,把面积只当位置。 数字是集合运算算出来的;圆的大小和交叠面积通常只是布局。
- 最后核对分母。 百分比最容易误读,因为不同包可能用并集、集合总数或其他口径。没有明确分母时,优先标计数。
常见陷阱
重复值会把“行数”冒充“成员数”
集合的元素必须唯一。同一个基因在一张差异分析表里出现两行,集合意义上仍然只算一个成员。绘图前显式 unique(),不要指望每个包都以同一种方式替你去重。
NA 不是一个真实成员
三个列表里各有一个 NA,集合函数可能把它们当成共同值,也可能在内部丢掉;两种结果都不是你要表达的生物学重叠。先去掉缺失和空字符串,再画图。
标识符体系不一致,会制造“没有交集”
一份是 Ensembl ID,另一份是 gene symbol,即使指向同一批基因,字符串交集也会接近零。大小写、版本后缀(如 .12)、同义名和一对多映射都有同样问题。统一标识符是数据准备,不是绘图参数。
圆面积通常不按数量成比例
下面 RNA-seq 有 58 个成员,Proteomics 有 42 个,但三个圆的面积看起来接近。这是有意的:经典韦恩图优先保证七个区域放得下标签。若面积比例本身必须有意义,需要的是 area-proportional Euler diagram;即便如此,也要说明布局可能只是近似解。
半透明混色会生成色板之外的新颜色
经典画法的交集区由半透明填充叠出来。中间看到的橄榄、棕或灰不是新的类别色,而是图形设备混出的结果。因此图例只解释三个集合的原色,不要再给混色区域编一套颜色含义。后续把色板换进 Palette Lab 时,也要评价叠色后的可分辨性,而不只看三个原始色块。
百分比没有写分母,就没有可比性
“交集 20%”可能是占 A、占 B、占并集,甚至是包自己选的统计口径。图中直接放区域计数;确实需要比例时,在正文或图注里写出算式,例如 (|A \cap B| / |A \cup B|)。
配色
经典版使用 walter_white2 中的天青、橄榄绿和沙漠橙。它们负责标识三个无序集合,所以用定性色板;圆填充设为 0.46 的透明度,让边界重叠后仍能看见下层,但不把混出的颜色误当第四种编码。
轮廓统一用深灰而不是各圆同色描边。原因很实际:填充已经承担集合身份,深色轮廓只负责把区域边界切清楚;两套视觉信号不会互相竞争。
区域计数版的颜色含义完全不同:它不再给集合上色,而是从纸白到天青按交集成员数连续变化。此时集合身份由轮廓和名称承担。两种颜色语义不要混在同一张图里——否则读者无法判断一块颜色是在说“属于哪个集合”,还是“这里有多少成员”。

