Venn Diagram with Item labels

后端 未结 2 630
遥遥无期
遥遥无期 2020-12-09 10:38

Suppose I have two vectors

foo <- c(\'a\',\'b\',\'c\',\'d\')
baa <- c(\'a\',\'e\',\'f\',\'g\')

Does anyone know of a way to produce a

相关标签:
2条回答
  • 2020-12-09 10:56

    A quick solution using the venn.diagram function from the VennDiagram package. The labels (counts) are hard coded in the function so can't be changed using function arguments. But for a simple example like this you can change the grobs yourself.

    library(VennDiagram)
    
    # your data
    foo <- c('a','b','c','d')
    baa <- c('a','e','f','g')
    
    # Generate plot
    v <- venn.diagram(list(foo=foo, baa=baa),
                      fill = c("orange", "blue"),
                      alpha = c(0.5, 0.5), cat.cex = 1.5, cex=1.5,
                      filename=NULL)
    
    # have a look at the default plot
    grid.newpage()
    grid.draw(v)
    
    # have a look at the names in the plot object v
    lapply(v,  names)
    # We are interested in the labels
    lapply(v, function(i) i$label)
    
    # Over-write labels (5 to 7 chosen by manual check of labels)
    # in foo only
    v[[5]]$label  <- paste(setdiff(foo, baa), collapse="\n")  
    # in baa only
    v[[6]]$label <- paste(setdiff(baa, foo)  , collapse="\n")  
    # intesection
    v[[7]]$label <- paste(intersect(foo, baa), collapse="\n")  
    
    # plot  
    grid.newpage()
    grid.draw(v)
    

    Which produces

    enter image description here

    Obviously this method would quickly get out of hand with more categories and intersections.

    0 讨论(0)
  • 2020-12-09 11:07

    Using the RAM package:

    library(RAM)
    foo <- c('a','b','c','d')
    baa <- c('a','e','f','g')
    group.venn(list(foo=foo, baa=baa), label=TRUE, 
        fill = c("orange", "blue"),
        cat.pos = c(0, 0),
        lab.cex=1.1)
    

    0 讨论(0)
提交回复
热议问题