Улучшите VennDiagram, уменьшив неперекрывающиеся области.

Я построил приведенную ниже диаграмму Венна, используя код.

# Venn Diagram
grid.newpage();
venn.plot4 <- draw.quad.venn(
    area1 = 849, area2 = 7181, area3 = 1776, area4 = 6254,
    n12 = 0, n13 = 849, n14 = 0, n23 = 927, n24 = 6254, n34 = 0,
    n123 = 0, n124 = 0, n134 = 0, n234 = 0,
    n1234 = 0,
    category = c("A", "B", "C", "D"),
    fill = c("orange", "red", "green", "blue"),
    lty = "dashed",
    cex = 2,
    cat.cex = 2,
    cat.col = c("orange", "red", "green", "blue")
    );
grid.draw(venn.plot4);

Венндиаграмма

Есть много непересекающихся областей (0). Не могли бы вы предложить способы настройки геометрических фигур в соответствии с перекрывающимися областями?

EDIT После рассмотрения предложений @zx8754 я попытался построить график с использованием пакета venneuler. Выглядит лучше, чем предыдущий сюжет. Но тем не менее, перекрывающиеся области A и C не отражают фактические значения (A должен полностью быть частью C). Я даже не мог видеть варианты нанесения чисел на график. Любые предложения приветствуются.

# including the null values 
vd <- venneuler(c(A=849, B=7181, C=1776, D=6254, 
                  "A&B"=0, "A&C"=849, "A&D"=0, "B&C"=927, "B&D"=6254, "C&D"=0))
plot(vd)

vennplot

Я также пробовал пакет d3vennR с приведенным ниже кодом.

venn_tooltip(
    d3vennR(
        data = list(
            list(sets= list('A'), size= 849),
            list(sets= list('B'), size= 7181),
            list(sets= list('C'), size= 1776),
            list(sets= list('D'), size= 6254),
            list(sets= list('A','B'), size= 0),
            list(sets= list('A','C'), size= 849),
            list(sets= list('A','D'), size= 0),
            list(sets= list('B','C'), size= 927),
            list(sets= list('B','D'), size= 6254),
            list(sets= list('C','D'), size= 0)
        )
        ,layoutFunction = '
function(d) { return venn.venn(d, { initialLayout: venn.classicMDSLayout });}
  '
    ))

Хотя между областями B и C есть перекрытие, мы могли видеть, что на выходе нет перекрытия. Посоветуйте, как это исправить?


person Prradep    schedule 03.07.2015    source источник
comment
Я думаю, что вам нужна пропорциональная диаграмма Венна. с полупрозрачностью   -  person zx8754    schedule 03.07.2015
comment
@zx8754 zx8754 Спасибо, это мне поможет!   -  person Prradep    schedule 03.07.2015
comment
Так это дубликат поста, закрыть?   -  person zx8754    schedule 03.07.2015
comment
@ zx8754 Zx8754 Думаю, мне могут понадобиться некоторые предложения о том, как включить числа в график помимо названия категории. Как только я закончу с моими запросами, я попрошу вас закрыть его, спасибо!   -  person Prradep    schedule 03.07.2015
comment
Затем обновите свой пост соответствующим образом, уточните, каков именно ваш ожидаемый результат. Не дополняйте свой пост в комментариях новыми вопросами.   -  person zx8754    schedule 03.07.2015
comment
Пакет d3vennR Кента Рассела может оказаться полезным.   -  person RHertel    schedule 03.07.2015
comment
@RHertel Я столкнулся с ошибкой, не могли бы вы взглянуть на обновленный вопрос? Спасибо   -  person Prradep    schedule 06.07.2015


Ответы (2)


Вы не даете venneuler той информации, которую он ожидает. Ему нужны непересекающиеся комбинации, но вы снабдили его союзами. A, например, в вашем примере должно быть установлено на 0.

Однако мой пакет euler может принимать как входные данные, так и подсчеты графиков, хотя я не уверен, что диаграмма Эйлера даже подходит для вашей диаграммы, как вы найдете из вывода ниже.

library(eulerr)

vd <- euler(c(A = 849, B = 7181, C = 1776, D = 6254, 
              "A&B" = 0, "A&C" = 849, "A&D" = 0, "B&C" = 927, "B&D" = 6254,
              "C&D" = 0),
            input = "union")

plot(vd, counts = TRUE)

введите здесь описание изображения

person Johan Larsson    schedule 10.03.2017

Похоже, это хорошо подходит для моего пакета nVennR. . Это пример ваших данных, хотя есть и более удобные способы ввода данных:

library(nVennR)
myV <- createVennObj(nSets = 4, sNames = c('A', 'B', 'C', 'D'))
myV <- setVennRegion(myV, c('A', 'C'), 849)
myV <- setVennRegion(myV, c('B', 'C'), 927)
myV <- setVennRegion(myV, c('B', 'D'), 6254)
myPlot <- plotVenn(nVennObj = myV, setColors=c("orange", "red", "green", "blue"), opacity=0.2)

Результат:

Диаграмма Эйлера

person vqf    schedule 07.02.2019