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

如何基于R语言dataframe绘制四集合韦恩图(Venn Diagram)

四集合韦恩图绘制方案

你提供的df1构造代码中Event4向量长度为5,和其他列长度不匹配,补全Jorge对应的0值即可正常运行。

核心逻辑

韦恩图的计数规则为:每个区域的数字代表「仅属于该区域对应事件组合、不属于其余事件」的样本量,只要将每个事件对应的样本名称整理为列表传入绘图函数,即可得到完全符合预期的结果。

方案1:ggvenn包(ggplot2风格,适配ggplot2图层语法)

  1. 加载依赖、构造正确数据集
library(ggvenn)

# 构造正确格式的df1
Name <- c("Amanda", "Emily", "George", "Baker", "Lee", "Jorge")
Event1 <- c(1,0,1,0,1,0)
Event2 <- c(1,0,0,0,1,1)
Event3 <- c(1,1,0,1,1,0)
Event4 <- c(1,1,0,0,1,0)
df1 <- data.frame(Name, Event1, Event2, Event3, Event4)
  1. 整理绘图输入格式(列表格式兼容性最好,不会出现计数错误)
venn_setlist <- list(
  Event1 = df1$Name[df1$Event1 == 1],
  Event2 = df1$Name[df1$Event2 == 1],
  Event3 = df1$Name[df1$Event3 == 1],
  Event4 = df1$Name[df1$Event4 == 1]
)
  1. 绘图
ggvenn(
  data = venn_setlist,
  fill_color = c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3"),
  stroke_size = 0.5,
  set_name_size = 4,
  text_size = 3
)

计数校验(和原始数据完全匹配):

  • 四事件共同交集:Amanda、Lee,共2个
  • 仅Event3独有:Baker,共1个
  • Event3与Event4双交集(不含其余事件):Emily,共1个
  • 仅Event1独有:George,共1个
  • 仅Event2独有:Jorge,共1个
  • 其余双事件、三事件交集区域样本量为0

方案2:VennDiagram包(基础绘图体系,支持直接导出高清矢量图)

library(VennDiagram)
library(grid)

# 复用上面构造好的venn_setlist
venn_p <- venn.diagram(
  x = venn_setlist,
  filename = NULL,
  fill = c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3"),
  alpha = 0.5,
  cex = 1.2,
  cat.cex = 1.2,
  margin = 0.1
)
grid.newpage()
grid.draw(venn_p)

之前绘图失败的常见原因:一是数据构造阶段Event4向量长度不足,导致值错位、数据框生成报错;二是直接传入包含Name列的完整数据框,函数误将非事件列纳入集合计算,或0/1值未正确映射样本导致计数错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:36:25