Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Venn Diagram with Item labels

Tags:

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 venn diagram but have the vector items visualised within the diagram.

Like so? (made in powerpoint) enter image description here

like image 318
A_Skelton73 Avatar asked Jul 29 '14 16:07

A_Skelton73


People also ask

How do you label a Venn diagram?

Every circle should overlap with at least one other circle. Label each circle. Near or inside of each circle place the name of the topic or item which the circle represents. Avoid writing the titles inside neighboring circles in order to maintain clarity.

What do you call for the items inside the Venn diagram?

A Venn diagram consists of multiple overlapping closed curves, usually circles, each representing a set. The points inside a curve labelled S represent elements of the set S, while points outside the boundary represent elements not in the set S.

What is a Venn diagram explain with example?

A Venn diagram is an illustration that uses circles to show the relationships among things or finite groups of things. Circles that overlap have a commonality while circles that do not overlap do not share those traits. Venn diagrams help to visually represent the similarities and differences between two concepts.


2 Answers

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.

like image 62
user20650 Avatar answered Sep 29 '22 18:09

user20650


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) 

enter image description here

like image 30
Marco Sandri Avatar answered Sep 29 '22 18:09

Marco Sandri