Functions for plotting areaproportional two and threeway Venn diagrams in matplotlib.
Project description
Routines for plotting areaweighted two and threecircle venn diagrams.
Installation
Install the package as usual via pip:
$ python m pip install matplotlibvenn
Dependencies
numpy,
scipy,
matplotlib.
Usage
The package provides four main functions: venn2, venn2_circles, venn3 and venn3_circles.
The functions venn2 and venn2_circles accept as their only required argument a 3element list (Ab, aB, AB) of subset sizes, e.g.:
venn2(subsets = (3, 2, 1))
and draw a twocircle venn diagram with respective region areas. In the particular example, the region, corresponding to subset A and not B will be three times larger in area than the region, corresponding to subset A and B. Alternatively, you can simply provide a list of two set or Counter (i.e. multiset) objects instead (new in version 0.7), e.g.:
venn2([set(['A', 'B', 'C', 'D']), set(['D', 'E', 'F'])])
Similarly, the functions venn3 and venn3_circles take a 7element list of subset sizes (Abc, aBc, ABc, abC, AbC, aBC, ABC), and draw a threecircle areaweighted venn diagram. Alternatively, you can provide a list of three set or Counter objects (rather than counting sizes for all 7 subsets).
The functions venn2_circles and venn3_circles draw just the circles, whereas the functions venn2 and venn3 draw the diagrams as a collection of colored patches, annotated with text labels. In addition (version 0.7+), functions venn2_unweighted and venn3_unweighted draw the Venn diagrams without areaweighting.
Note that for a threecircle venn diagram it is not in general possible to achieve exact correspondence between the required set sizes and region areas, however in most cases the picture will still provide a decent indication.
The functions venn2_circles and venn3_circles return the list of matplotlib.patch.Circle objects that may be tuned further to your liking. The functions venn2 and venn3 return an object of class VennDiagram, which gives access to constituent patches, text elements, and (since version 0.7) the information about the centers and radii of the circles.
Basic Example:
from matplotlib_venn import venn2 venn2(subsets = (3, 2, 1))
For the threecircle case:
from matplotlib_venn import venn3 venn3(subsets = (1, 1, 1, 2, 1, 2, 2), set_labels = ('Set1', 'Set2', 'Set3'))
A more elaborate example:
from matplotlib import pyplot as plt import numpy as np from matplotlib_venn import venn3, venn3_circles plt.figure(figsize=(4,4)) v = venn3(subsets=(1, 1, 1, 1, 1, 1, 1), set_labels = ('A', 'B', 'C')) v.get_patch_by_id('100').set_alpha(1.0) v.get_patch_by_id('100').set_color('white') v.get_label_by_id('100').set_text('Unknown') v.get_label_by_id('A').set_text('Set "A"') c = venn3_circles(subsets=(1, 1, 1, 1, 1, 1, 1), linestyle='dashed') c[0].set_lw(1.0) c[0].set_ls('dotted') plt.title("Sample Venn diagram") plt.annotate('Unknown set', xy=v.get_label_by_id('100').get_position()  np.array([0, 0.05]), xytext=(70,70), ha='center', textcoords='offset points', bbox=dict(boxstyle='round,pad=0.5', fc='gray', alpha=0.1), arrowprops=dict(arrowstyle='>', connectionstyle='arc3,rad=0.5',color='gray')) plt.show()
An example with multiple subplots (new in version 0.6):
from matplotlib_venn import venn2, venn2_circles figure, axes = plt.subplots(2, 2) venn2(subsets={'10': 1, '01': 1, '11': 1}, set_labels = ('A', 'B'), ax=axes[0][0]) venn2_circles((1, 2, 3), ax=axes[0][1]) venn3(subsets=(1, 1, 1, 1, 1, 1, 1), set_labels = ('A', 'B', 'C'), ax=axes[1][0]) venn3_circles({'001': 10, '100': 20, '010': 21, '110': 13, '011': 14}, ax=axes[1][1]) plt.show()
Perhaps the most common use case is generating a Venn diagram given three sets of objects:
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')) plt.show()
Questions
If you ask your questions at StackOverflow and tag them matplotlibvenn, chances are high you’ll get an answer from the maintainer of this package.
See also
Report issues and submit fixes at Github: https://github.com/konstantint/matplotlibvenn
Check out the DEVELOPERREADME.rst for developmentrelated notes.
Some alternative means of plotting a Venn diagram (as of October 2012) are reviewed in the blog post: http://fouryears.eu/2012/10/13/venndiagramsinpython/
The matplotlibsubsets package visualizes a hierarchy of sets as a tree of rectangles.
The matplotlib_venn_wordcloud package combines Venn diagrams with word clouds for a pretty amazing (and amusing) result.
Project details
Release history Release notifications  RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for matplotlib_venn0.11.10py3noneany.whl
Algorithm  Hash digest  

SHA256  85650429baff7a812b2785540979e6bf0abcc747e7fe5ffd2a972cb917a826d6 

MD5  306edbce0aded5848d6b7d9bf056a746 

BLAKE2b256  b1f412ea88962cd17acb58bfcce1b93ce256f591698f9adb247de3eea630f590 