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)
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.
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.
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.
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
Obviously this method would quickly get out of hand with more categories and intersections.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With