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

在R中绘制带测试次数求和的韦恩图问题求助

在R中绘制带测试次数总和的韦恩图

步骤1:计算韦恩图各区域的总测试次数

先根据参与者的测试分布,分组计算对应区域的测试次数总和:

# 生成可重复的示例数据
set.seed(123)
dat <- data.frame(id=1:30,
                  machine1 = sample(0:7, 30, replace =T),
                  machine2 = sample(0:3, 30, replace =T),
                  machine3 = sample(0:6, 30, replace =T))

# 定义各韦恩区域的条件并计算总和
region_values <- list(
  "只在Machine1" = sum(dat$machine1[dat$machine1>0 & dat$machine2==0 & dat$machine3==0]),
  "Machine1&Machine2" = sum(dat$machine1[dat$machine1>0 & dat$machine2>0 & dat$machine3==0]) + 
                        sum(dat$machine2[dat$machine1>0 & dat$machine2>0 & dat$machine3==0]),
  "只在Machine2" = sum(dat$machine2[dat$machine2>0 & dat$machine1==0 & dat$machine3==0]),
  "三台机器都有" = sum(dat$machine1[dat$machine1>0 & dat$machine2>0 & dat$machine3>0]) +
                   sum(dat$machine2[dat$machine1>0 & dat$machine2>0 & dat$machine3>0]) +
                   sum(dat$machine3[dat$machine1>0 & dat$machine2>0 & dat$machine3>0]),
  "Machine1&Machine3" = sum(dat$machine1[dat$machine1>0 & dat$machine3>0 & dat$machine2==0]) +
                        sum(dat$machine3[dat$machine1>0 & dat$machine3>0 & dat$machine2==0]),
  "只在Machine3" = sum(dat$machine3[dat$machine3>0 & dat$machine1==0 & dat$machine2==0]),
  "Machine2&Machine3" = sum(dat$machine2[dat$machine2>0 & dat$machine3>0 & dat$machine1==0]) +
                        sum(dat$machine3[dat$machine2>0 & dat$machine3>0 & dat$machine1==0])
)

步骤2:使用VennDiagram绘制韦恩图

该包支持直接传入数值绘制,无需转换为字符串集合:

# 安装并加载包
if (!require(VennDiagram)) install.packages("VennDiagram")
library(VennDiagram)

# 绘制三元韦恩图
venn_plot <- draw.triple.venn(
  area1 = region_values[["只在Machine1"]] + region_values[["Machine1&Machine2"]] + 
          region_values[["Machine1&Machine3"]] + region_values[["三台机器都有"]],
  area2 = region_values[["只在Machine2"]] + region_values[["Machine1&Machine2"]] + 
          region_values[["Machine2&Machine3"]] + region_values[["三台机器都有"]],
  area3 = region_values[["只在Machine3"]] + region_values[["Machine1&Machine3"]] + 
          region_values[["Machine2&Machine3"]] + region_values[["三台机器都有"]],
  n12 = region_values[["Machine1&Machine2"]] + region_values[["三台机器都有"]],
  n13 = region_values[["Machine1&Machine3"]] + region_values[["三台机器都有"]],
  n23 = region_values[["Machine2&Machine3"]] + region_values[["三台机器都有"]],
  n123 = region_values[["三台机器都有"]],
  category = c("Machine1", "Machine2", "Machine3"),
  fill = c("#0073C2FF", "#EFC000FF", "#868686FF"),
  cat.cex = 1.2,
  cex = 1.5,
  fontfamily = "sans",
  main = "测试执行次数分布韦恩图"
)

# 输出图形
grid.draw(venn_plot)

补充:从原始测试列汇总数据

如果你的数据是machine1test1这类0/1原始测试列,可先按机器汇总次数,再重复上述步骤:

# 生成原始测试列数据
set.seed(123)
dat_raw <- data.frame(id=1:30,
                      machine1test1 = sample(0:1, 30, replace=T),
                      machine1test2 = sample(0:1, 30, replace=T),
                      machine2test1 = sample(0:1, 30, replace=T),
                      machine3test1 = sample(0:1, 30, replace=T),
                      machine3test2 = sample(0:1, 30, replace=T))

# 汇总每个机器的测试总次数
library(dplyr)
dat <- dat_raw %>%
  mutate(
    machine1 = rowSums(select(., starts_with("machine1"))),
    machine2 = rowSums(select(., starts_with("machine2"))),
    machine3 = rowSums(select(., starts_with("machine3")))
  ) %>%
  select(id, machine1, machine2, machine3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:23:16