【问题标题】:how to make a Venn plot of several groups如何制作几个组的维恩图
【发布时间】:2019-05-17 14:56:10
【问题描述】:

我有这样的数据

df<- structure(list(X1 = c(37L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, NA, 
11L, 12L), X2 = c(40L, NA, 35L, 35L, 35L, 34L, 29L, 28L, 28L, 
NA, 25L, 24L), X3 = c(60L, 44L, 49L, 41L, NA, NA, NA, 25L, 26L, 
NA, NA, 22L), T1 = c(19L, 55L, 47L, 46L, 36L, 42L, 25L, NA, 33L, 
42L, 50L, 22L), T2 = c(75L, NA, 32L, 44L, 27L, 31L, 17L, NA, 
18L, 45L, 10L, 11L), T3 = c(5L, 6L, 7L, 8L, 9L, 10L, 11L, NA, 
46L, 36L, 42L, NA), P1 = c(2L, 2L, 3L, 4L, 2L, 6L, 7L, 8L, 9L, 
NA, 1L, 12L), P2 = c(40L, 44L, 4L, 2L, 1L, 1L, 29L, 1L, 1L, 1L, 
5L, 55L), P3 = c(1L, 44L, 49L, 3L, NA, NA, NA, 25L, 26L, NA, 
NA, 66L)), class = "data.frame", row.names = c(NA, -12L))

group1 是 X1,X2,X3 group2 是 T1,T2,T3 group3 是 P1,P2,P3

我正在尝试制作维恩图,但我不知道该怎么做。我在这里阅读了很多问题,也在这里阅读了一个非常好的教程

https://rstudio-pubs-static.s3.amazonaws.com/13301_6641d73cfac741a59c0a851feb99e98b.html

第一组三个重复,第二组三个重复,第三组三个重复。

【问题讨论】:

  • 为了制作维恩图,您需要有某种数字来显示您的组之间的重叠。您如何在这里定义重叠?
  • @LyzanderR 如果我们在同一行中有 2 的值,则表示它们重叠

标签: r


【解决方案1】:

如果您想将您的重复视为一个组,您可以使用我的nVennR 包:

library(nVennR)
nonas <- function(x) {unlist(as.list(na.exclude(x)))}
myV2 <- plotVenn(list(X=unique(c(nonas(df$X1), nonas(df$X2), nonas(df$X3))),  P=unique(c(nonas(df$P1), nonas(df$P2), nonas(df$P3))), T=unique(c(nonas(df$T1), nonas(df$T2), nonas(df$T3)))), nCycles = 20)
myV2 <- plotVenn(nVennObj = myV2)

这会给你一个准比例维恩图:

然后您可以检查每个区域:

>listVennRegions(myV2, na.rm = F)
$`0, 0, 0 ()`
[1] NA

$`0, 0, 1 (T)`
 [1] 19 47 46 36 42 33 50 75 32 27 31 17 18 45 10

$`0, 1, 0 (P)`
[1]  1 66

$`0, 1, 1 (P, T)`
[1] 55

$`1, 0, 0 (X)`
[1] 37 35 34 28 24 60 41

$`1, 0, 1 (X, T)`
[1] 11 22

$`1, 1, 0 (X, P)`
[1]  2  3  4 12 40 29 49 26

$`1, 1, 1 (X, P, T)`
[1]  5  6  7  8  9 25 44

出于好奇,nVenn 算法对集合数没有限制。您可能会执行九组图表,但它会很慢并且提供的信息很少。它可能是这样的:

nonas <- function(x) {unlist(as.list(na.exclude(x)))}
myV <- plotVenn(list(X1=nonas(df$X1), X2=nonas(df$X2), X3=nonas(df$X3), T1=nonas(df$T1), T2=nonas(df$T2), T3=nonas(df$T3), P1=nonas(df$P1), P2=nonas(df$P2), P3=nonas(df$P3)))
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- plotVenn(nVennObj = myV)
myV <- showSVG(myV, opacity = 0.2, borderWidth = 0.5, setColors = c('#ff0044', '#ff4400', '#ff2222', '#44ff00', '#00ff44', '#22ff22', '#4400ff', '#0044ff', '#2222ff'))

可能不是很有用。如果您想了解更多,可以阅读包裹的vignette

【讨论】:

  • 您能解释一下这些数字的含义吗?我想当我有三组时,我可以拥有三组之间的重叠。什么不是,什么是值的总数,没有?
  • 是的,那将是第一张照片。 X 组包括 X1、X2 和 X3 中的所有元素。在listVennRegions 命令之后,您可以看到哪些元素属于下面的每个区域。大数字告诉您该区域中有多少元素。例如,三个组共有七个元素。括号内的数字可帮助您定位每个区域。例如,(1, 3) 表示“属于 X (1) 和 P (3) 组但不属于 T (2) 组的元素。您可以阅读小插图了解详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2013-01-17
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多