如何将计数添加到从矩阵绘制的venneuler venn图中

时间:2017-10-30 15:18:42

标签: r venn-diagram

我有几个基因列表(各种长度),我想通过维恩图在视觉上进行比较。我写了一个小函数,它使用ReShape2将基因名称的任何数据帧转换为1和#1的矩阵,Venneuler可以使用它来绘制维恩图。我的问题是我无法弄清楚如何提取/计算与维恩图的每个部分相关的值。另外,如果我可以将这些值添加到R中的情节中,那就太好了。

以下是我的数据的示例:

 A <- c("gene1", "gene2", "gene3", "gene5", "gene12", "", "")
 B <- c("gene1", "gene2", "gene6", "gene7", "", "", "")
 C <- c("gene2", "gene6", "gene7", "gene8", "gene9", "gene13", "gene14")
 D <- c("gene7", "gene8", "gene9", "gene10", "gene11", "gene12", "")
 dat <- data.frame(A,B,C,D)

将基因名称表转换为Vennueler可以使用的存在/不存在矩阵的函数:

 vennfun <- function(x) { 
  x$id <- seq(1, nrow(x))  #add a column of numbers (required for melt)
  xm <- melt(x, id.vars="id", na.rm=TRUE)  #melt table into two columns (value & variable)
  xc <- dcast(xm, value~variable, fun.aggregate=length)  #remove NA's, list presence/absence of each value for each variable (1 or 0)
  rownames(xc) <- xc$value  #value column = rownames (required for Venneuler)
  xc$value <- NULL  #remove redundent value column
  xc  #output the new dataframe
}

加载所需的包:

library(reshape2)
library(venneuler)

运行vennfun并使用输出绘制带有venneuler的维恩图:

VennDat <- vennfun(dat)
genes.venn <- venneuler(VennDat)
plot(genes.venn)

我的问题是:如何获得与所有可能条件相关的基因数量(即A,AB,ABC,ABCD,B,BC,BCD,ABD,ACD等),和/或我如何将这些值添加到我的维恩图中?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您愿意更改套餐,可以使用 eulerr (我是其作者)来完成此操作:

library(eulerr)
genes.venn <- euler(VennDat)
plot(genes.venn, quantities = TRUE)

enter image description here

顺便说一下,这个问题并不适合欧拉图。 (适合度很差。)也许你应该考虑另一种选择?

答案 1 :(得分:0)

我认为我的nVennR软件包将是一个很好的工具:

library(nVennR)
A <- c("gene1", "gene2", "gene3", "gene5", "gene12", "", "")
B <- c("gene1", "gene2", "gene6", "gene7", "", "", "")
C <- c("gene2", "gene6", "gene7", "gene8", "gene9", "gene13", "gene14")
D <- c("gene7", "gene8", "gene9", "gene10", "gene11", "gene12", "")
dat <- data.frame(A,B,C,D)
myV <- plotVenn(as.list(dat))

这将绘制图表(丢弃空值):

nVennR_genes

然后您可以浏览该图:

getVennRegion(nVennObj = myV, region = c('C', 'D'))
[1] "gene8" "gene9"

或者:

listVennRegions(nVennObj = myV)
$`0, 0, 0, 1 (D)`
[1] "gene10" "gene11"

$`0, 0, 1, 0 (C)`
[1] "gene13" "gene14"

$`0, 0, 1, 1 (C, D)`
[1] "gene8" "gene9"

$`0, 1, 1, 0 (B, C)`
[1] "gene6"

$`0, 1, 1, 1 (B, C, D)`
[1] "gene7"

$`1, 0, 0, 0 (A)`
[1] "gene3" "gene5"

$`1, 0, 0, 1 (A, D)`
[1] "gene12"

$`1, 1, 0, 0 (A, B)`
[1] "gene1"

$`1, 1, 0, 1 (A, B, D)`
[1] ""

$`1, 1, 1, 0 (A, B, C)`
[1] "gene2"

您还可以使用更简单的web interface最多存储六组。