使用ggVennDiagram可视化多指标成功率的问题求助
简洁韦恩图实现方案(针对指标成败分布)
核心思路
把每个试验(trial)的成功指标集合提取出来,比如某条trial仅metricA、metricC成功,就对应集合{metricA, metricC},让ggVennDiagram直接识别这些集合的交叉关系。
步骤代码
- 安装并加载依赖包
# 首次运行需安装 install.packages(c("tidyverse", "ggVennDiagram")) # 加载包 library(tidyverse); library(ggVennDiagram)
- 预处理数据:生成每个trial的成功指标列表
假设你的数据集名为df,执行以下代码:
# 按行提取每个trial的成功指标集合 success_sets <- df %>% rowwise() %>% mutate( success_metrics = list( c( ifelse(metricA == "success", "metricA", NA), ifelse(metricB == "success", "metricB", NA), ifelse(metricC == "success", "metricC", NA), ifelse(metricD == "success", "metricD", NA) ) %>% na.omit() # 过滤失败的指标 ) ) %>% pull(success_metrics) # 提取为列表格式
- 绘制韦恩图
ggVennDiagram(success_sets) + # 可选:调整填充色,让交叉区域更直观 scale_fill_gradient(low = "white", high = "#63B8FF")
额外说明
- 图中每个区域的数值代表对应指标组合的trial数量,RStudio中鼠标悬停可查看详情
- 若要计算特定占比(如成功metricA但失败metricC的trial占比),可提取区域统计数据:
venn_stats <- ggVennDiagram(success_sets)@data # 查看所有区域的统计结果 print(venn_stats) # 计算成功A但失败C的占比(即仅属于A的数量 / 所有成功A的数量) only_A <- venn_stats$count[venn_stats$name == "metricA"] total_A <- sum(venn_stats$count[str_detect(venn_stats$name, "metricA")]) only_A / total_A
内容的提问来源于stack exchange,提问作者Cobalamin
相关产品推荐
相关产品推荐

