Создать диаграмму Венна, используя существующие значения в R?

Мне было интересно, могу ли я сгенерировать диаграмму Венна, используя 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 <- as.matrix(M)
vennDiagram(m)

Я вижу:

Ошибка в vennDiagram(m): Невозможно построить диаграмму Венна для более чем 3 комплектов

Есть ли способ обойти эту проблему? Я пытаюсь обойти генерацию матрицы 1 и 0, поскольку у меня уже есть счет.

2 ответа

Решение

Вот хакерский способ сделать это. Я генерирую искусственные наборы, которые содержат фальшивые члены, составленные из целых чисел. Но это работает

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)

Я подумал, что можно также использовать это решение, если доступны отдельные номера и общие области draw.triple.venn(area1, area2, area3, n12, n23, n13, n123), где area - размер изображения, а nxy - общая область между Areax и Areay. так что draw.triple.venn(130868, 126842, 120249, 125901, 118086, 119360, 117898), я бы отправил изображение диаграммы Венна, но для этого мне нужно больше репутации!

Другие вопросы по тегам