I am looking for a Python library that is able to produce a scaled, 4-set Venn diagrams. Scaled means that the displayed areas should try to match the cardinality of each set. 4-set means I should be able to specify 4 sets.
For example, the following Venn diagrams is based on 4 sets (I, II, III and IV), but is not scaled:
(it was generated using the R package VennDiagram with the code:
library(VennDiagram);
# http://www.inside-r.org/packages/cran/VennDiagram/docs/venn.diagram
# https://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf
# http://www.biomedcentral.com/content/supplementary/1471-2105-12-35-s3.r
# http://www.biomedcentral.com/1471-2105/12/35
# 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"
);
The Python package matplotlib-venn does scale but currently doesn't support more than 3 sets:
from matplotlib import pyplot as plt
from matplotlib_venn import venn3, venn3_circles
set1 = set(['A', 'B', 'C', 'D'])
set2 = set(['B', 'C', 'D', 'E'])
set3 = set(['C', 'D',' E', 'F', 'G'])
venn3([set1, set2, set3], ('Set1', 'Set2', 'Set3'))
Any language, OS and license is fine.
If possible:
- the number of items in each set can displayed.
- plots can be saved in some vectorial format.
- plots can be displayed in black and white (for some antique publication requirements).
I am not fully sure to what extent the request is feasible, e.g. Chen, Hanbo, and Paul C. Boutros. "VennDiagram: a package for the generation of highly-customizable Venn and Euler diagrams in R." BMC bioinformatics 12.1 (2011): 35.:
During development of the VennDiagram package, it was discovered that it was impossible to draw accurate, scaled Venn diagrams with three sets using circles.
Related: