NB: The code in this notebook is invoked from within the functional_test.py test suite.
In [1]:
from matplotlib_venn import venn3
from tests.utils import verify_diagram
from matplotlib.pyplot import figure, subplot
In [2]:
# The usual case
v = venn3((1, 1, 1, 1, 1, 1, 1))
test_points = {'111': [(0, 0)],
'110': [(0, 0.3)],
'101': [(-0.3, -0.15)],
'011': [(0.3, -0.15)],
'100': [(-0.3, 0.2)],
'010': [(0.3, 0.2)],
'001': [(0, -0.3)],
'': [(0,0.5), (-0.42, -0.3), (0.42, -0.3)]}
verify_diagram(v, test_points)
In [3]:
# |ABC| = 0
v = venn3((1, 1, 1, 1, 1, 1, 0))
test_points = {'111': [(0, 0)],
'110': [(0, 0.3)],
'101': [(-0.3, -0.15)],
'011': [(0.3, -0.15)],
'100': [(-0.3, 0.2)],
'010': [(0.3, 0.2)],
'001': [(0, -0.3)],
'': [(0,0.5), (-0.42, -0.3), (0.42, -0.3)]}
verify_diagram(v, test_points)
In [4]:
# |ABc| = 0 / |aBC| = 0 / |AbC| = 0 / |ABC| != 0
# In addition, we'll test the subplot functionality interactively
figure(figsize=(9,3))
subplot(131)
v = venn3((1, 1, 0, 1, 1, 1, 1))
test_points = {'111': [(0, 0)],
'110': [(0, 0.35)],
'101': [(-0.3, -0.15)],
'011': [(0.3, -0.15)],
'100': [(-0.3, 0.25)],
'010': [(0.3, 0.25)],
'001': [(0, -0.3)],
'': [(0,0.5), (-0.42, -0.3), (0.42, -0.3)]}
verify_diagram(v, test_points)
subplot(132)
v = venn3((1, 1, 1, 1, 0, 1, 1))
test_points = {'111': [(0, 0)],
'110': [(0, 0.35)],
'101': [(-0.25, -0.25)],
'011': [(0.3, -0.15)],
'100': [(-0.4, 0.25)],
'010': [(0.3, 0.25)],
'001': [(0, -0.4)],
'': [(0,0.55), (-0.42, -0.3), (0.52, -0.3)]}
verify_diagram(v, test_points)
subplot(133)
v = venn3((1, 1, 1, 1, 1, 0, 1))
test_points = {'111': [(0, 0)],
'110': [(0, 0.35)],
'101': [(-0.3, -0.15)],
'011': [(0.25, -0.25)],
'100': [(-0.4, 0.25)],
'010': [(0.4, 0.25)],
'001': [(0, -0.4)],
'': [(0,0.55), (-0.52, -0.3), (0.42, -0.3)]}
verify_diagram(v, test_points)
In [5]:
# |ABc| = 0 / |aBC| = 0 / |AbC| = 0 / |ABC| == 0
figure(figsize=(9,3))
subplot(131)
v = venn3((1, 1, 0, 1, 1, 1, 0))
verify_diagram(v, {'111': None,
'100': [(-0.5, 0)],
'101': [(-0.3, 0)],
'001': [(0, 0)],
'011': [(0.3, 0)],
'010': [(0.5, 0)],
'110': None,
'': [(-0.8, 0), (0.8, 0)]})
subplot(132)
v = venn3((1, 1, 1, 1, 0, 1, 0))
verify_diagram(v, {'111': None,
'001': [(-0.5, 0)],
'011': [(-0.3, 0)],
'010': [(0, 0)],
'110': [(0.3, 0)],
'100': [(0.5, 0)],
'101': None,
'': [(-0.8, 0), (0.8, 0)]})
subplot(133)
v = venn3((1, 1, 1, 1, 1, 0, 0))
verify_diagram(v, {'111': None,
'010': [(-0.5, 0)],
'110': [(-0.3, 0)],
'100': [(0, 0)],
'101': [(0.3, 0)],
'001': [(0.5, 0)],
'011': None,
'': [(-0.8, 0), (0.8, 0)]})
In [6]:
# Two nonintersecting sets (as above, but using different syntax and equal set sizes)
figure(figsize=(9,3))
subplot(131)
v = venn3([set([1,2]), set([2,3]), set([3,4])])
verify_diagram(v, {'111': None,
'001': [(-0.5, 0)],
'011': [(-0.3, 0)],
'010': [(0, 0)],
'110': [(0.3, 0)],
'100': [(0.5, 0)],
'101': None,
'': [(-0.8, 0), (0.8, 0)]})
subplot(132)
v = venn3([set([2,3]), set([3,4]), set([1,2])])
verify_diagram(v, {'111': None,
'010': [(-0.5, 0)],
'110': [(-0.3, 0)],
'100': [(0, 0)],
'101': [(0.3, 0)],
'001': [(0.5, 0)],
'011': None,
'': [(-0.8, 0), (0.8, 0)]})
subplot(133)
v = venn3([set([3,4]), set([1,2]), set([2,3])])
verify_diagram(v, {'111': None,
'100': [(-0.5, 0)],
'101': [(-0.3, 0)],
'001': [(0, 0)],
'011': [(0.3, 0)],
'010': [(0.5, 0)],
'110': None,
'': [(-0.8, 0), (0.8, 0)]})
In [7]:
# |Abc| = 0 / |aBc| = 0 / |abC| = 0 / |ABC| != 0
figure(figsize=(9,3))
subplot(131)
v = venn3((0, 1, 1, 1, 1, 1, 1))
verify_diagram(v, {'111': [(0, 0)],
'110': [(0, 0.3)],
'101': [(-0.3, -0.15)],
'011': [(0.3, -0.15)],
'100': [(-0.3, 0.25)],
'010': [(0.3, 0.25)],
'001': [(0, -0.35)],
'': [(0,0.55), (-0.55, -0.3), (0.42, -0.3)]})
subplot(132)
v = venn3((1, 0, 1, 1, 1, 1, 1))
verify_diagram(v, {'111': [(0, 0)],
'110': [(0, 0.3)],
'101': [(-0.3, -0.15)],
'011': [(0.3, -0.15)],
'100': [(-0.3, 0.25)],
'010': [(0.3, 0.25)],
'001': [(0, -0.35)],
'': [(0,0.55), (-0.42, -0.3), (0.55, -0.3)]})
subplot(133)
v = venn3((1, 1, 1, 0, 1, 1, 1))
verify_diagram(v, {'111': [(0, 0)],
'110': [(0, 0.3)],
'101': [(-0.3, -0.15)],
'011': [(0.3, -0.15)],
'100': [(-0.3, 0.25)],
'010': [(0.3, 0.25)],
'001': [(0, -0.38)],
'': [(0,0.55), (-0.48, -0.3), (0.48, -0.3)]})
In [8]:
# |Abc| = 0 / |aBc| = 0 / |abC| = 0 / |ABC| == 0
figure(figsize=(9,3))
subplot(131)
v = venn3((0, 1, 1, 1, 1, 1, 0))
verify_diagram(v, {'111': [(0, 0)],
'110': [(0, 0.3)],
'101': [(-0.3, -0.15)],
'011': [(0.3, -0.15)],
'100': [(-0.3, 0.25)],
'010': [(0.3, 0.25)],
'001': [(0, -0.35)],
'': [(0,0.55), (-0.55, -0.3), (0.42, -0.3)]})
subplot(132)
v = venn3((1, 0, 1, 1, 1, 1, 0))
verify_diagram(v, {'111': [(0, 0)],
'110': [(0, 0.3)],
'101': [(-0.3, -0.15)],
'011': [(0.3, -0.15)],
'100': [(-0.3, 0.25)],
'010': [(0.3, 0.25)],
'001': [(0, -0.35)],
'': [(0,0.55), (-0.42, -0.3), (0.55, -0.3)]})
subplot(133)
v = venn3((1, 1, 1, 0, 1, 1, 0))
verify_diagram(v, {'111': [(0, 0)],
'110': [(0, 0.3)],
'101': [(-0.3, -0.15)],
'011': [(0.3, -0.15)],
'100': [(-0.3, 0.25)],
'010': [(0.3, 0.25)],
'001': [(0, -0.38)],
'': [(0,0.55), (-0.48, -0.3), (0.48, -0.3)]})
In [9]:
# All sets nonintersecting
v = venn3([set([1]), set([2]), set([3])])
verify_diagram(v, {'100': [(-0.5, 0)],
'010': [(0, 0)],
'001': [(0.5, 0)],
'110': None,
'011': None,
'101': None,
'111': None,
'': [(-0.33, 0), (0.33, 0)]})
In [10]:
# One set subset of another, intersecting with third
# TODO: Uncomment the try-catch and fix the label positioning problem
try:
subplot(131)
v = venn3([set([1,2]), set([1,2,3]), set([2,3])])
verify_diagram(v, {'111': [(0, 0)],
'110': [(0, 0.45)],
'101': None,
'011': [(0.35, -0.25)],
'100': None,
'010': [(0.35, 0.35)],
'001': None,
'': [(0,0.6), (-0.42, -0.4), (0.42, -0.4)]})
subplot(132)
v = venn3([set([1,2,3]), set([2,3]), set([1,2])])
verify_diagram(v, {'111': [(0, 0)],
'110': [(0, 0.45)],
'011': None,
'101': [(-0.35, -0.25)],
'010': None,
'100': [(-0.35, 0.35)],
'001': None,
'': [(0,0.6), (-0.42, -0.4), (0.42, -0.4)]})
subplot(133)
v = venn3([set([2,3]), set([1,2]), set([1,2,3])])
verify_diagram(v, {'111': [(0, 0)],
'101': [(-0.4, 0)],
'011': [(0.4, 0)],
'110': None,
'100': None,
'010': None,
'001': [(0, -0.45)],
'': [(0,0.6), (-0.45, -0.4), (0.45, -0.4)]})
except AssertionError:
print("Assertion Error!")
In [11]:
# Issue 10
subplot(121)
v = venn3([set([1,5,8]), set([2,3,4,5,6]), set([5,6,8,9])])
verify_diagram(v, {'111': [(0, 0)],
'110': [(-0.1, 0.3)],
'101': [(-0.3, -0.15)],
'011': [(0.3, -0.15)],
'100': [(-0.3, 0.25)],
'010': [(0.3, 0.25)],
'001': [(0, -0.35)],
'': [(0,0.5), (-0.5, -0.3), (0.5, -0.3)]})
subplot(122)
v = venn3([set([5,8]), set([2,3,4,5,6]), set([5,6,7,8,9])])
verify_diagram(v, {'111': [(0, 0)],
'110': None,
'101': [(-0.3, -0.15)],
'011': [(0.25, -0.15)],
'100': None,
'010': [(0.3, 0.25)],
'001': [(0, -0.35)],
'': [(0,0.5), (-0.6, -0.3), (0.5, -0.3)]})
In [12]:
# All three sets are equal
v = venn3([set([1]), set([1]), set([1])])
verify_diagram(v, {'111': [(0.5, 0), (-0.5, 0), (0, 0.5), (0, -0.5)],
'110': None,
'101': None,
'011': None,
'100': None,
'010': None,
'001': None,
'': [(0,0.6), (-0.42, -0.4), (0.42, -0.4)]})
In [13]:
# Two sets equal, one separate (TODO: set label positioning)
subplot(131)
v = venn3([set([1]), set([1]), set([2])])
verify_diagram(v, {'110': [(-0.5, 0), (-0.1, 0)],
'001': [(0.2, 0), (0.5, 0), (0.8, 0)],
'': [(0.15, 0)],
'111': None, '100': None, '010': None, '101': None, '011': None})
subplot(132)
v = venn3([set([2]), set([1]), set([2])])
verify_diagram(v, {'101': [(-0.5, 0), (-0.1, 0)],
'010': [(0.2, 0), (0.5, 0), (0.8, 0)],
'': [(0.15, 0)],
'111': None, '100': None, '001': None, '110': None, '011': None})
subplot(133)
v = venn3([set([1]), set([2]), set([2])])
verify_diagram(v, {'011': [(-0.5, 0), (-0.1, 0)],
'100': [(0.2, 0), (0.5, 0), (0.8, 0)],
'': [(0.15, 0)],
'111': None, '010': None, '001': None, '101': None, '110': None})
In [14]:
# Two sets intersect, one separate
subplot(131)
v = venn3([set([1,2]), set([2,3]), set([4])])
verify_diagram(v, {'100': [(-0.5, 0)],
'110': [(-0.1, 0)],
'010': [(0.2, 0)],
'': [(0.4, 0), (1.0, 0), (-0.75, 0)],
'001': [(0.7, 0)],
'111': None, '011': None, '101': None})
subplot(132)
v = venn3([set([1,2]), set([4]), set([2,3])])
verify_diagram(v, {'001': [(-0.5, 0)],
'101': [(-0.1, 0)],
'100': [(0.2, 0)],
'': [(0.4, 0), (1.0, 0), (-0.75, 0)],
'010': [(0.7, 0)],
'111': None, '110': None, '011': None})
subplot(133)
v = venn3([set([4]), set([1,2]), set([2,3])])
verify_diagram(v, {'010': [(-0.5, 0)],
'011': [(-0.1, 0)],
'001': [(0.2, 0)],
'': [(0.4, 0), (1.0, 0), (-0.75, 0)],
'100': [(0.7, 0)],
'111': None, '101': None, '110': None})
In [15]:
# Issue 12
v = venn3((75566, 53950, 811, 39228, 7207, 811, 127))
verify_diagram(v, {'111': None,
'110': [(0.1, 0.1)],
'101': [(-0.2, -0.15)],
'011': [(0.22, -0.13)],
'100': [(-0.3, 0.2)],
'010': [(0.3, 0.2)],
'001': [(0, -0.3)],
'': [(0,0.5), (-0.42, -0.3), (0.42, -0.3)]})
assert v.get_patch_by_id('111') is None
assert v.get_label_by_id('111') is not None
In [16]:
# Issue 14
subplot(131)
v = venn3([8, 74, 7, 50, 8, 433, 83])
verify_diagram(v, {'111': [(-0.3, 0)],
'110': [(-0.45, 0.2)],
'101': [(-0.5, -0.05)],
'011': [(0.22, -0.13)],
'100': [(-0.52, 0.0)],
'010': [(0.3, 0.4)],
'001': [(0, -0.5)],
'': [(0,0.6), (-0.47, -0.3), (0.49, -0.3)]})
subplot(132)
v = venn3([5, 35, 6, 81, 21, 621, 178])
verify_diagram(v, {'111': [(-0.3, 0)],
#'110': [(-0.45, 0.2)], # TODO: Region 110 should exist, ideally.
'101': [(-0.5, -0.05)],
'011': [(0.22, -0.13)],
'100': [(-0.54, 0.0)],
'010': [(0.3, 0.45)],
'001': [(0, -0.55)],
'': [(0,0.6), (-0.47, -0.3), (0.55, -0.3)]})
In [17]:
v = venn3([12, 424, 18, 13, 1, 139, 8])
verify_diagram(v, {'010': [(0.1, 0.0)],
'011': [(0, 0)],
'111': [(-0.35,0)],
'110': [(-0.45,0)],
'100': [(-0.5, 0)],
'001': [(-0.35, -0.35)]})
# TODO: The region '101' (of size 1) should ideally exist