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

