如何将计数添加到从矩阵绘制的 venneuler 维恩图
How to add counts to a venneuler venn diagram that was plotted from a matrix
我有几个基因列表(所有长度各不相同),我想通过维恩图直观地进行比较。我写了一个小函数,它使用 ReShape2 将基因名称的任何数据帧转换为 1 和 0 的矩阵,Venneuler 可以使用它来绘制维恩图。我的问题是我无法弄清楚如何 extract/calculate 与维恩图的每个部分关联的值。此外,如果我可以将这些值添加到我在 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)
将 table 基因名称转换为 Vennueler 可以使用的 presence/absence 矩阵的函数:
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 等),and/or 如何将这些值添加到我的维恩图?
谢谢!!
如果您愿意更改软件包,可以使用 eulerr(我是其作者)来完成此操作:
library(eulerr)
genes.venn <- euler(VennDat)
plot(genes.venn, quantities = TRUE)
顺便说一句,这个问题不太适合欧拉图。 (合身度很差。)也许你应该考虑一个替代方案?
我认为我的 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))
这将绘制图表(空值被丢弃):
然后您可以浏览图表:
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 最多六组。
我有几个基因列表(所有长度各不相同),我想通过维恩图直观地进行比较。我写了一个小函数,它使用 ReShape2 将基因名称的任何数据帧转换为 1 和 0 的矩阵,Venneuler 可以使用它来绘制维恩图。我的问题是我无法弄清楚如何 extract/calculate 与维恩图的每个部分关联的值。此外,如果我可以将这些值添加到我在 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)
将 table 基因名称转换为 Vennueler 可以使用的 presence/absence 矩阵的函数:
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 等),and/or 如何将这些值添加到我的维恩图?
谢谢!!
如果您愿意更改软件包,可以使用 eulerr(我是其作者)来完成此操作:
library(eulerr)
genes.venn <- euler(VennDat)
plot(genes.venn, quantities = TRUE)
顺便说一句,这个问题不太适合欧拉图。 (合身度很差。)也许你应该考虑一个替代方案?
我认为我的 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))
这将绘制图表(空值被丢弃):
然后您可以浏览图表:
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 最多六组。