You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python绘制指定集合操作对应的维恩图?求实现指导

Python绘制集合操作维恩图指南

首先安装matplotlib_venn库——这是Python中专门用于绘制维恩图的工具,依赖matplotlib:

pip install matplotlib-venn

以下针对你提供的集合与操作,逐一实现可视化:

初始集合的维恩图

给定初始集合:

a = {100, 3.12, False, "Bye"}
b = {100, 3.12, False, "Welcome"}

绘制初始集合维恩图的代码:

from matplotlib_venn import venn2
import matplotlib.pyplot as plt

set_a = a
set_b = b

# 绘制双集合维恩图框架
venn2([set_a, set_b], set_labels=('Set A', 'Set B'))
# 添加虚线边框
venn2_circles([set_a, set_b], linestyle='dashed', linewidth=1, color='gray')

# 标注各区域元素
plt.annotate('\n'.join(map(str, set_a - set_b)), xy=venn2.get_label_by_id('10').get_position(), ha='center')
plt.annotate('\n'.join(map(str, set_b - set_a)), xy=venn2.get_label_by_id('01').get_position(), ha='center')
plt.annotate('\n'.join(map(str, set_a & set_b)), xy=venn2.get_label_by_id('11').get_position(), ha='center')

plt.title("初始集合维恩图")
plt.show()

各类集合操作的维恩图实现

1. 差集(a.difference(b))

差集表示仅属于A但不属于B的元素,可视化代码:

diff_ab = a.difference(b)

venn2([set_a, set_b], set_labels=('Set A', 'Set B'))
venn2_circles([set_a, set_b], linestyle='dashed', linewidth=1, color='gray')
# 高亮差集区域
venn2([diff_ab, set()], set_labels=('A - B', ''), alpha=0.5, colors=('blue', 'white'))

plt.annotate('\n'.join(map(str, diff_ab)), xy=venn2.get_label_by_id('10').get_position(), ha='center')
plt.title("A与B的差集")
plt.show()

2. 交集(a.intersection(b))

交集表示同时属于A和B的元素,可视化代码:

intersect_ab = a.intersection(b)

venn2([set_a, set_b], set_labels=('Set A', 'Set B'))
venn2_circles([set_a, set_b], linestyle='dashed', linewidth=1, color='gray')
# 高亮交集区域
venn2([intersect_ab, intersect_ab], set_labels=('A ∩ B', ''), alpha=0.5, colors=('purple', 'white'))

plt.annotate('\n'.join(map(str, intersect_ab)), xy=venn2.get_label_by_id('11').get_position(), ha='center')
plt.title("A与B的交集")
plt.show()

3. 并集(a.union(b))

并集表示属于A或属于B的所有元素,可视化代码:

union_ab = a.union(b)

venn2([set_a, set_b], set_labels=('Set A', 'Set B'))
venn2_circles([set_a, set_b], linestyle='dashed', linewidth=1, color='gray')
# 高亮并集区域
venn2([union_ab, union_ab], set_labels=('A ∪ B', ''), alpha=0.3, colors=('green', 'white'))

plt.annotate('\n'.join(map(str, union_ab)), xy=(0, -0.5), ha='center')
plt.title("A与B的并集")
plt.show()

4. 修改集合后的维恩图

执行a.add(4)和a.remove("Bye")后,集合a变为{100, 3.12, False, 4},此时绘制与b的维恩图:

a_modified = {100, 3.12, False, 4}
b = {100, 3.12, False, "Welcome"}

venn2([a_modified, b], set_labels=('Modified A', 'Set B'))
venn2_circles([a_modified, b], linestyle='dashed', linewidth=1, color='gray')

plt.annotate('\n'.join(map(str, a_modified - b)), xy=venn2.get_label_by_id('10').get_position(), ha='center')
plt.annotate('\n'.join(map(str, b - a_modified)), xy=venn2.get_label_by_id('01').get_position(), ha='center')
plt.annotate('\n'.join(map(str, a_modified & b)), xy=venn2.get_label_by_id('11').get_position(), ha='center')

plt.title("修改后A与B的维恩图")
plt.show()

子集/超集的可视化判断

若a.issubset(b)返回True,维恩图会呈现A完全被B包含的形态;若a.issuperset(b)返回True,则B完全被A包含。你的初始集合中两者均为False,维恩图会显示两个集合有重叠但互不包含。

注:集合中不同类型的元素(数字、布尔值、字符串)可通过map(str, ...)统一转为字符串标注。

内容的提问来源于stack exchange,提问作者marivic valdehueza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:20:28