ggplot2:在维恩图中可视化多个指标的成功率

问题描述 投票:0回答:1

我有 4 列,指定每次试验中是否满足特定指标。

mydata <- data.frame(trial = c(1,2,3,4,5,6,7,...), # eg. up to 27 000
                     metricA = c('success', 'failed', 'failed', 'success',...), 
                     metricB = c('failed', 'success', 'success', 'success',...), 
                     metricC = c('failed', 'failed', 'success', 'failed',...),
                     metricD = c('success', 'success', 'failed', 'success',...),
                     )

指标列与试验列一样长,因此对于每次试验,都知道每个指标是失败还是成功。

现在我想可视化每个指标以及跨指标有多少次试验成功或失败。 IE。在度量 a 中成功的试验中有 10% 在度量 c 中失败,依此类推。我想用维恩图将其可视化。这是我生成的代码:

mydata <- read.csv("trials-metrics.csv")

mA<-mydata$metricA 
mB<-mydata$metricB 
mC<-mydata$metricC 
mD<-mydata$metricD 

x <- list(
  A = mA, 
  B = mB, 
  C = mC,
  D = mD
)

ggVennDiagram(x, category.names = c("A","B","C","D"))

这会产生以下情节。

enter image description here

最有可能的是,这种类型的维恩图仅比较组之间的共享值。因此,我假设我需要为每个指标结果组合生成一个唯一的值。我怎样才能实现这个?还是我还漏掉了其他东西?

我发现了这个类似的条目,其中使用相同的“真/假”类型的二聚体数据成功生成了相同的维恩图。

从数据帧制作维恩图

我对 R 非常陌生,所以最简洁的代码解决方案将不胜感激。

python r ggplot2 correlation venn-diagram
1个回答
0
投票

正如您已经猜到的那样,当我们处理集合时,我们必须使元素唯一,例如您可以将

trial
列粘贴到每个指标列。

使用一些随机示例数据:

n <- 1000
set.seed(123)

mydata <- data.frame(
  trial = seq_len(n), # eg. up to 27 000
  metricA = sample(c("success", "failed"), n, replace = TRUE),
  metricB = sample(c("success", "failed"), n, replace = TRUE),
  metricC = sample(c("success", "failed"), n, replace = TRUE),
  metricD = sample(c("success", "failed"), n, replace = TRUE)
)

library(ggVennDiagram)

x <- list(
  A = paste0(mydata$metricA, mydata$trial),
  B = paste0(mydata$metricB, mydata$trial),
  C = paste0(mydata$metricC, mydata$trial),
  D = paste0(mydata$metricD, mydata$trial)
)
ggVennDiagram(x)

或者您可以考虑使用

lapply
:

,而不是手动创建列表
xx <- lapply(mydata[-1], \(x) paste(x, mydata$trial))
ggVennDiagram(xx, category.names = LETTERS[seq_along(xx)])

© www.soinside.com 2019 - 2024. All rights reserved.