Learn R Programming

VennDiagram (version 1.0.0)

venn.diagram: Make a Venn Diagram

Description

This function takes a list and creates a publication-quality TIFF Venn Diagram

Usage

venn.diagram(x, filename, height = 3000, width = 3000, resolution = 500, units = "px", compression = "lzw", na = "stop", main = "", sub = "", main.pos = c(0.5, 1.05), main.fontface = "plain", main.fontfamily = "serif", main.col = "black", main.cex = 1, main.just = c(0.5, 1), sub.pos = c(0.5, 1.05), sub.fontface = "plain", sub.fontfamily = "serif", sub.col = "black", sub.cex = 1, sub.just = c(0.5, 1), ...);

Arguments

x
A list of vectors, with each component corresponding to a separate circle in the Venn diagram
filename
Filename for tiff output, or if NULL returns the grid object itself
height
Integer giving the height of the output figure in units
width
Integer giving the width of the output figure in units
resolution
Resolution of the final figure in DPI
units
Size-units to use for the final figure
compression
What compression algorithm should be applied to the final tiff
na
Missing value handling method: "none", "stop", "remove"
main
Character giving the main title of the diagram
sub
Character giving the subtitle of the diagram
main.pos
Vector of length 2 indicating (x,y) of the main title
main.fontface
Character giving the fontface (font style) of the main title
main.fontfamily
Character giving the fontfamily (font type) of the main title
main.col
Character giving the colour of the main title
main.cex
Number giving the cex (font size) of the main title
main.just
Vector of length 2 indicating horizontal and vertical justification of the main title
sub.pos
Vector of length 2 indicating (x,y) of the subtitle
sub.fontface
Character giving the fontface (font style) of the subtitle
sub.fontfamily
Character giving the fontfamily (font type) of the subtitle
sub.col
Character Colour of the subtitle
sub.cex
Number giving the cex (font size) of the subtitle
sub.just
Vector of length 2 indicating horizontal and vertical justification of the subtitle
...
A series of graphical parameters tweaking the plot. See below for details

Value

  • Plots a figure to the file given by the filename argument.

Details

cccl{ Argument Venn Sizes Class Description lwd 1,2,3,4 numeric Vector giving the lwd of each circle's circumference lty 1,2,3,4 numeric Vector giving the lty of each circle's circumference col 1,2,3,4 character Vector giving the colour of each circle's circumference fill 1,2,3,4 character Vector giving the colour of each circle's area alpha 1,2,3,4 numeric Vector giving the alpha transparency of each circle's area label.col 1,2,3,4 character Vector giving the colour for each area label (length = 1/3/7/15 based on set-number) cex 1,2,3,4 numeric Vector giving the cex for each area label (length = 1/3/7/15 based on set-number) fontface 1,2,3,4 character Vector giving the fontface for each area label (length = 1/3/7/15 based on set-number) fontfamily 1,2,3,4 character Vector giving the fontfamily for each area label (length = 1/3/7/15 based on set-number) cat.pos 1,2,3,4 numeric Vector giving the position (in degrees) of each category name along the circle, with 0 at (x1, y1 + r) cat.dist 1,2,3,4 numeric Vector giving the distance (in npc units) of each category name from the edge of the circle (can be negative) cat.cex 1,2,3,4 numeric Vector giving the cex for each category name cat.col 1,2,3,4 character Vector giving the colour for each category name cat.fontface 1,2,3,4 character Vector giving the fontface for each category name cat.fontfamily 1,2,3,4 character Vector giving the fontfamily for each category name cat.just 1,2,3,4 numeric List (length = 1/2/3/4 based on set number) of Vectors of length 2 indicating horizontal and vertical justification for each category name cat.default.pos 1,2,3 character Either 'outer' or 'text' to specify the default location of category names (cat.pos and cat.dist are handled differently) margin 1,2,3,4 numeric Number giving the amount of whitespace around the diagram in grid units rotation.degree 1,2,3,4 numeric Number of degrees to rotate the entire diagram rotation.centre 1,2,3,4 numeric Vector of length 2 indicating (x,y) of the rotation centre rotation 3 numeric Number giving the clockwise rotation of a three-set Venn diagram (1, 2, or 3) reverse 3 logical Reflect the three-set Venn diagram along its central vertical axis of symmetry. Use in combination with rotation to generate all possible set orders euler.d 2, 3 logical Enable Euler diagrams for two-set and three-set Venn diagrams scaled 2, 3 logical Enable scaling for two-set and certain three-set Euler diagrams. sep.dist 2, 3 numeric Controls the separation between distinct circles in certain two-set or three-set Euler diagrams. offset 2, 3 numeric Number between 0 and 1 giving the amount to offset the smaller circle by in the inclusion type of two-set Euler diagram and certain similar three-set Euler diagrams. inverted 2 logical Flip the two-set Venn diagram along its vertical axis (distinguished from reverse) ext.text 2 logical Allow external text labels when areas are small ext.line.lwd 2 numeric lwd of line connecting to ext.text ext.dist 2 numeric Vector of length 1 or 2 indicating length of external line (use negative values to shorten the line ) ext.l 2 numeric Vector of length 1 or 2 indicating the proportion of the external line that is drawn from the anchor to the text }

Examples

Run this code
# compact and minimal notation
venn.diagram(list(A = 1:150, B = 121:170), "Venn_2set_simple.tiff");
venn.diagram(list(A = 1:150, B = 121:170, C = 101:200), "Venn_3set_simple.tiff");

# a more elaborate two-set Venn diagram with title and subtitle
venn.diagram(
	x = list(
		"A" = 1:100,
		"B" = 96:140
		),
	filename = "Venn_2set_complex.tiff",
	scaled = TRUE,
	ext.text = TRUE,
	ext.line.lwd = 2,
	ext.dist = -0.15,
	ext.l = 0.9,
	ext.pos = -4,
	inverted = TRUE,
	cex = 2.5,
	cat.cex = 2.5,
	rotation.degree = 45,
	main = "Complex Venn Diagram",
	sub = "Featuring: rotation and external lines",
	main.cex = 2,
	sub.cex = 1
	);
	
venn.diagram(
	x = list(
		A = c(1:100),
		B = c(61:70, 71:100),
		C = c(41:60, 61:70)
		),
	euler.d = TRUE,
	filename = "Euler_3set_simple.tiff",
	cat.pos = c(-25, 0, 30),
	cat.dist = c(0.05, 0.05, 0.02),,
	cex = 2.5,
	cat.cex = 2.5,
	reverse = TRUE
	);
	
venn.diagram(
	x = list(
		A = c(1:10),
		B = c(11:90),
		C = c(81:90)
		),
	euler.d = TRUE,
	filename = "Euler_3set_scaled.tiff",
	cex = 2.5,
	cat.cex = 2.5,
	cat.pos = 0
	);

venn.diagram(
	x = list(
		A = c(1:60, 61:105, 106:140, 141:160, 166:175, 176:180, 181:205, 206:220),
		D = c(531:605, 476:530, 336:375, 376:405, 181:205, 206:220, 166:175, 176:180),
		B = c(61:105, 106:140, 181:205, 206:220, 221:285, 286:335, 336:375, 376:405),
		C = c(406:475, 286:335, 106:140, 141:160, 166:175, 181:205, 336:375, 476:530)
		),
	filename = "Venn_4set_pretty.tiff",
	col = "transparent",
	fill = c("cornflowerblue", "green", "yellow", "darkorchid1"),
	alpha = 0.50,
	label.col = c("orange", "white", "darkorchid4", "white", "white", "white", "white", "white", "darkblue", "white", "white", "white", "white", "darkgreen", "white"),
	cex = 1.5,
	fontfamily = "serif",
	fontface = "bold",
	cat.col = c("darkblue", "darkgreen", "orange", "darkorchid4"),
	cat.cex = 1.5,
	cat.pos = 0,
	cat.dist = 0.07,
	cat.fontfamily = "serif",
	rotation.degree = 270,
	margin = 0.2
	);

# Figure 1A
venn.diagram(
	x = list(
		Label = 1:100
		),
	filename = "1A-single_Venn.tiff",
	col = "black",
	lwd = 9,
	fontface = "bold",
	fill = "grey",
	alpha = 0.75,
	cex = 4,
	cat.cex = 3,
	cat.fontface = "bold",
	);

# Figure 1B
venn.diagram(
	x = list(
		X = 1:150,
		Y = 121:180
		),
	filename = "1B-double_Venn.tiff",
	lwd = 4,
	fill = c("cornflowerblue", "darkorchid1"),
	alpha = 0.75,
	label.col = "white",
	cex = 4,
	fontfamily = "serif",
	fontface = "bold",
	cat.col = c("cornflowerblue", "darkorchid1"),
	cat.cex = 3,
	cat.fontfamily = "serif",
	cat.fontface = "bold",
	cat.dist = c(0.03, 0.03),
	cat.pos = c(-20, 14)
	);

# Figure 1C
venn.diagram(
	x = list(
		R = c(1:70, 71:110, 111:120, 121:140),
		B = c(141:200, 71:110, 111:120, 201:230),
		G = c(231:280, 111:120, 121:140, 201:230)
		),
	filename = "1C-triple_Venn.tiff",
	col = "transparent",
	fill = c("red", "blue", "green"),
	alpha = 0.5,
	label.col = c("darkred", "white", "darkblue", "white", "white", "white", "darkgreen"),
	cex = 2.5,
	fontfamily = "serif",
	fontface = "bold",
	cat.default.pos = "text",
	cat.col = c("darkred", "darkblue", "darkgreen"),
	cat.cex = 2.5,
	cat.fontfamily = "serif",
	cat.dist = c(0.06, 0.06, 0.03),
	cat.pos = 0
	);

# Figure 1D
venn.diagram(
	x = list(
		I = c(1:60, 61:105, 106:140, 141:160, 166:175, 176:180, 181:205, 206:220),
		IV = c(531:605, 476:530, 336:375, 376:405, 181:205, 206:220, 166:175, 176:180),
		II = c(61:105, 106:140, 181:205, 206:220, 221:285, 286:335, 336:375, 376:405),
		III = c(406:475, 286:335, 106:140, 141:160, 166:175, 181:205, 336:375, 476:530)
		),
	filename = "1D-quadruple_Venn.tiff",
	col = "black",
	lty = "dotted",
	lwd = 4,
	fill = c("cornflowerblue", "green", "yellow", "darkorchid1"),
	alpha = 0.50,
	label.col = c("orange", "white", "darkorchid4", "white", "white", "white", "white", "white", "darkblue", "white", "white", "white", "white", "darkgreen", "white"),
	cex = 2.5,
	fontfamily = "serif",
	fontface = "bold",
	cat.col = c("darkblue", "darkgreen", "orange", "darkorchid4"),
	cat.cex = 2.5,
	cat.fontfamily = "serif"
	);

# Figure 2-1
venn.diagram(
	x = list(
		A = 1:105,
		B = 101:115
		),
	filename = "2-1_special_case_ext-text.tiff",
	cex = 2.5,
	cat.cex = 2.5,
	cat.pos = c(-20, 20),
	ext.line.lty = "dotted",
	ext.line.lwd = 2,
	ext.pos = 12,
	ext.dist = -0.12,
	ext.l = 0.85
	);

# Figure 2-2
venn.diagram(
	x = list(
		A = 1:100,
		B = 1:10
		),
	filename = "2-2_special_case_pairwise-inclusion.tiff",
	cex = 2.5,
	cat.cex = 2.5,
	cat.pos = 0
	);

# Figure 2-3
venn.diagram(
	x = list(
		A = 1:150,
		B = 151:250
		),
	filename = "2-3_special_case_pairwise-exclusion.tiff",
	cex = 2.5,
	cat.cex = 2.5,
	cat.pos = c(0, 0),
	cat.dist = 0.05
	);

# Figure 2-4
venn.diagram(
	x = list(
		A = c(1:50, 101:140, 141:160, 161:170),
		B = c(171:230, 101:140, 161:170, 291:320),
		C = c(141:160, 161:170, 291:320)
		),
	sp.cases = TRUE,
	filename = "2-4_triple_special_case-001.tiff",
	cex = 2.5,
	cat.cex = 2.5,
	cat.dist = c(0.05, 0.05, -0.1)
	);

# Figure 2-5
venn.diagram(
	x = list(
		A = c(1:100),
		B = c(61:70, 71:100),
		C = c(41:60, 61:70)
		),
	sp.cases = TRUE,
	filename = "2-5_triple_special_case-012AA.tiff",
	cex = 2.5,
	cat.cex = 2.5,
	cat.pos = c(-25, 0, 30),
	cat.dist = c(0.05, 0.05, 0.02)
	);

# Figure 2-6
venn.diagram(
	x = list(
		A = c(1:90),
		B = c(1:25),
		C = c(1:5)
		),
	sp.cases = TRUE,
	filename = "2-6_triple_special_case-022AAAO.tiff",
	cex = 2.5,
	cat.cex = 2.5,
	cat.pos = 0,
	cat.dist = c(0.03, 0.03, 0.01)
	);

# Figure 2-7
venn.diagram(
	x = list(
		A = c(1:20),
		B = c(21:80),
		C = c(81:210)
		),
	sp.cases = TRUE,
	filename = "2-7_triple_special_case-100.tiff",
	cex = 2.5,
	cat.cex = 2.5,
	cat.dist = 0.05
	);

# Figure 2-8
venn.diagram(
	x = list(
		A = c(1:80),
		B = c(41:150),
		C = c(71:100)
		),
	sp.cases = TRUE,
	filename = "2-8_triple_special_case-011A.tiff",
	cex = 2.5,
	cat.cex = 2.5,
	cat.dist = c(0.07, 0.07, 0.02),
	cat.pos = c(-20, 20, 20)
	);

# Figure 2-9
venn.diagram(
	x = list(
		A = c(1:10),
		B = c(11:90),
		C = c(81:90)
		),
	sp.cases = TRUE,
	filename = "2-9_triple_special_case-121AO.tiff",
	cex = 2.5,
	cat.cex = 2.5,
	cat.pos = 0,
	cat.dist = c(0.04, 0.04, 0.02),
	reverse = TRUE
	);

Run the code above in your browser using DataLab