2

我想知道是否可以vennDiagram在 R 中使用生成维恩图而不使用生成计数矩阵vennCounts但保存了类似的矩阵。所以假设我有这个矩阵:

G S P Counts

1 1 1 117898    
1 1 0 125901    
1 0 1 119360    
0 1 1 118086    
1 0 0 3505      
0 1 0 753       
0 0 1 701       
0 0 0 0 

我叫它 M. 当我这样做的时候

m <- as.matrix(M)
vennDiagram(m)

我懂了:

vennDiagram(m) 中的错误:无法绘制超过 3 组的维恩图

有没有办法解决这个问题?我试图绕过生成 1 和 0 的矩阵,因为我已经有了计数。

4

2 回答 2

3

我想如果可以使用单个数字和共享区域,也可以使用此解决方案 draw.triple.venn(area1, area2, area3, n12, n23, n13, n123) 其中 area 是总大小,nxy 是两者之间的共享区域面积和面积。所以 draw.triple.venn(130868, 126842, 120249, 125901, 118086, 119360, 117898),我会发送维恩图图像,但我需要更多的声誉才能这样做!

于 2014-11-06T13:36:55.633 回答
1

这是一个 hacky 方法。我生成包含由整数组成的假成员的人工集合。但它有效

require(VennDiagram)
lines = "1 1 1 117898    
1 1 0 125901    
1 0 1 119360    
0 1 1 118086    
1 0 0 3505      
0 1 0 753       
0 0 1 701       
0 0 0 0"
con <- textConnection(lines)
data <- read.table(con)
names(data) = c('G','S','P')

close(con)

sets = vector(mode = 'list', length = ncol(data)-1)
names(sets) = names(data)[1:(ncol(data)-1)]
lastElement = 0
for (i in 1:nrow(data)){
    elements = lastElement:(lastElement+data[i,ncol(data)]-1)
    lastElement = elements[length(elements)]+1
    for (j in 1:(ncol(data)-1)){
        if (data[i,j]==1){
            sets[[j]]=c(sets[[j]],elements)
        }
    }
}
laVenn = venn.diagram(sets,filename=NULL)
plot.new()
grid.draw(laVenn)

在此处输入图像描述

于 2014-11-05T19:55:27.090 回答