matplotlib_venn库里支持venn2和venn3,以venn3为例绘图;
venn中包含venn2-venn6,以venn4为例绘图。
安装库:pip install matplotlib_venn和pip install venn
(1)venn3绘图:
import matplotlib.pyplot as plt
from matplotlib_venn import venn3
a=[12,9,6,13,10,12]
b=[8,6,10,7,9,11]
c=[11,12,9,12,13,9]
a1 = set(a)
b1 = set(b)
c1 = set(c)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文
plt.figure(figsize=(14, 8), dpi=200) #创建画布
g=venn3(subsets = [a1,b1,c1], #绘图数据集
set_labels = ('A', 'B','C'), #设置组名
set_colors=("r","b",'g'),#设置圈的颜色,中间颜色不能修改
alpha=0.6,#透明度
normalize_to=1.0,#venn图占据figure的比例,1.0为占满
)
plt.title('韦恩图',fontsize=15)
plt.show()
#并集
jj = a1.union(b1).union(c1)
#a1,b1交集
ab = a1.intersection(b1)
#a1,c1交集
ac = a1.intersection(c1)
#b1,c1交集
bc = b1.intersection(c1)
#a1,b1,c1交集
abc = a1.intersection(b1).intersection(c1)
#a1独有
a_unique = a1.difference(b1).difference(c1)
#b1独有
b_unique = b1.difference(a1).difference(c1)
#c1独有
c_unique = c1.difference(a1).difference(b1)
print('a1/b1/c1并集:{}\na1,b1交集:{}\na1,c1交集:{}\nb1,c1交集:{}\na1,b1,c1交集:{}\
\na1独有数据:{}\nb1独有数据:{}\nc1独有数据:{}\
'.format(jj,ab,ac,bc,abc,a_unique,b_unique,c_unique))


可以找到交集并集数据。
(2)也可以用venn中的venn3进行绘制
import matplotlib.pyplot as plt
import warnings
import venn
warnings.filterwarnings("ignore")
a=[12,9,6,13,10,12]
b=[8,6,10,7,9,11]
c=[11,12,9,12,13,9]
a1 = set(a)
b1 = set(b)
c1 = set(c)
labels = venn.generate_petal_labels([a1,b1,c1])
venn.venn3(labels, names=list('abc'),dpi=200)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文
plt.title('韦恩图',fontsize=15)
plt.show()

同理,venn4
import matplotlib.pyplot as plt
import warnings
import venn
warnings.filterwarnings("ignore")
a=[12,9,6,13,10,12]
b=[8,6,10,7,9,11]
c=[11,12,9,12,13,9]
d=[6,12,5,12,10,9]
a1 = set(a)
b1 = set(b)
c1 = set(c)
d1 = set(d)
labels = venn.generate_petal_labels([a1,b1,c1,d1])
venn.venn3(labels, names=list('abcd'),dpi=200)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文
plt.title('韦恩图',fontsize=15)
plt.show()

venn4可以显示百分比等信息
import matplotlib.pyplot as plt
import warnings
import venn
warnings.filterwarnings("ignore")
a=[12,9,6,13,10,12]
b=[8,6,10,7,9,11]
c=[11,12,9,12,13,9]
d=[6,12,5,12,10,9]
a1 = set(a)
b1 = set(b)
c1 = set(c)
d1 = set(d)
labels = venn.get_labels([a1,b1,c1,d1],fill=["number",
"logic",#开启每个组分代码
"percent"#每个组分的百分比
])
venn.venn3(labels, names=list('abcd'),dpi=200)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文
plt.title('韦恩图',fontsize=15)
plt.show()
