Создать диаграмму Венна, используя существующие значения в 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), я бы отправил изображение диаграммы Венна, но для этого мне нужно больше репутации!