Search code examples
rdataframeoverlappingvenn-diagram

How to find which elements related to which parts of venn diagram using calculate.overlap function in r?


The output of calculate.overlap is not clear. There are some names for each position of venn diagram such as: $a1 , $a2 , ... It becomes so complicated when we draw it for five list. How to recognize which names ($a1 , $a2 , ...) related to the overlap of which lists?

library(VennDiagram)

overlap=calculate.overlap(
    x=list(
        "A"=c("a","b","c"),
        "B"=c("a","b","c","d"),
        "C"=c("a","c","d")
    )
)

and this is the output:

$a5
[1] "a" "c"

$a2
[1] "b"

$a4
character(0)

$a6
[1] "d"

$a1
character(0)

$a3
character(0)

$a7
character(0)

How to replace these names with the names of my list?

My expected output is:

$A,B,C
[1] "a" "c"

$A,B
[1] "b"

$A,C
character(0)

$B,C
[1] "d"

$A
character(0)

$B
character(0)

$C
character(0)

Solution

  • There is an answer here. However, I do not claim to understand it. The general rule to order the regions in a Venn diagram is to use a binary representation of it. My nVennR package uses that representation and can give you a quick answer for any number of sets:

    > library(nVennR)
    > myV <- plotVenn(list("A"=c("a","b","c"), "B"=c("a","b","c","d"), "C"=c("a","c","d")), showPlot = F)
    > listVennRegions(myV)
    $`0, 1, 1 (B, C)`
    [1] "d"
    
    $`1, 1, 0 (A, B)`
    [1] "b"
    
    $`1, 1, 1 (A, B, C)`
    [1] "a" "c"
    
    > listVennRegions(myV, na.rm = F)
    $`0, 0, 0 ()`
    [1] NA
    
    $`0, 0, 1 (C)`
    [1] NA
    
    $`0, 1, 0 (B)`
    [1] NA
    
    $`0, 1, 1 (B, C)`
    [1] "d"
    
    $`1, 0, 0 (A)`
    [1] NA
    
    $`1, 0, 1 (A, C)`
    [1] NA
    
    $`1, 1, 0 (A, B)`
    [1] "b"
    
    $`1, 1, 1 (A, B, C)`
    [1] "a" "c"
    

    There is a vignette with more details on usage.