包的安装
pip install matplotlib-venn
依赖于以下的包:
- numpy
- scipy
- matplotlib
matplotlib-venn
主要用于绘制 two-circles 以及 three-circles 的文氏图。
使用
matplotlib-venn
包提供了四个主要的函数:venn2
、venn2-circles
、venn3
和 venn3-circles
。
venn2
和venn2_circles
接受一个3元素(Ab,aB,AB)构成的 tuple 作为各个子集所包含元素的个数(不是具体的元素):
- Ab:包含A,但不包含B,即A中非B的部分,
A∩¬B - aB:包含B,但不包含A,即B中非A,
B∩¬A - AB:既包含A,又包含B,即A与B的交集,
A∩B
venn2(subsets=(3, 2, 1), set_labels=('A', 'B'))
或者直接指定各自子集所包含的元素内容:
venn2([set(['A', 'B', 'C', 'D']), set(['D', 'E', 'F'])])
import matplotlib.pyplot as plt
from matplotlib_venn import venn
plt.figure(figsize=(4, 4))
venn2(subsets(3, 2, 1))
plt.show()
图中的3
、1
、2
分别表示各自子集的大小,而非集合中的元素内容;
v = venn2(subsets=(3, 0, 2), set_labels=('A', 'B'))
# 构造一种包含关系
v.get_label_by_id('10').set_text('')
v.get_label_by_id('01').set_text('')
v.get_label_by_id('11').set_text('')
# 或者设置任何你想设置的内容
类似地,venn3
与venn3_circles
接受一个7个元素构成的元组作为各个子集的大小(Abc, aBc, ABc, abC, AbC, aBC, ABC):
from matplotlib_venn import venn3
def int2bin(n):
s = bin(n)[2:]
return (3-len(s))*'0'+s
# 1 ⇒ '001'
# 2 ⇒ '010'
# 3 ⇒ '011'
# ...
# 7 ⇒ '111'
v = venn3(subsets=(1, 1, 1, 1, 1, 1, 1))
for i in range(1, 8):
v.get_label_by_id(int2bin(i)).set_text(int2bin(i))
plt.show()