Simple alternative to Venn diagrams

Share:

Description

A simple alternative to the traditional Venn diagram. It depicts each overlap as a separate bubble with area proportional to the overlap size.

Usage

1
2
  bvenn(sets, percentage = FALSE, colors = NULL,
    fontsize = 15, main = "", scale = 1, add = FALSE)

Arguments

sets

list of vectors to overlap. If list contains more than 3 elements only the first 3 are used.

percentage

logical showing if percentages or raw numbers are displayed

colors

vector of colors for the bubbles, see details on specifying that

fontsize

fontsize used for the numbers in the bubbles

main

title of the plot

scale

a scaling factor to adjust the base triangle size when the plot does not fit the window well.

add

logical determining if the figure is added to exixting plot or if a new plot is initialized

Details

Colors can be specified as vector. For 2 set case a 3 element vector is required with colors for: Set1, Set2 and Set1 & Set2 correspondingly. For 3 set case a 7 element vector is required with colors for: Set1, Set2, Set3, Set1 & Set2, Set1 & Set3, Set2 & Set3 and Set1 & Set2 & Set3 correspondingly.

Author(s)

Raivo Kolde <rkolde@gmail.com>

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
bvenn(list(Set1 = sample(letters, 14), Set2 = sample(letters, 9)))
bvenn(list(Set1 = sample(letters, 16), Set2 = sample(letters, 12), Set3 = sample(letters, 7)))

# Adding colors
bvenn(list(Set1 = sample(letters, 14), Set2 = sample(letters, 9)), colors = c("red",
"green", "yellow"))
bvenn(list(Set1 = sample(letters, 16), Set2 = sample(letters, 12), Set3 =
sample(letters, 7)), colors = c("red", "blue", "yellow", "purple", "orange", "green",
"brown"))

# Adjust the triangle size
bvenn(list(Set1 = sample(letters, 16), Set2 = sample(letters, 12), Set3 =
sample(letters, 7)), colors = c("red", "blue", "yellow", "purple", "orange", "green",
"brown"), scale = 0.7)


# Combine several diagrams using grid graphics
vplayout = function(x, y){
	return(viewport(layout.pos.row = x, layout.pos.col = y))
}
grid.newpage()
pushViewport(viewport(layout = grid.layout(ncol = 2, nrow = 2)))
for(i in 1:2){
	for(j in 1:2){
		pushViewport(vplayout(i, j))
		bvenn(list(Set1 = sample(letters, 16), Set2 = sample(letters, 3+ 3*j), Set3 = sample(letters, 7)), add = TRUE, fontsize = 10)
		upViewport()
	}
}

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.