如何用Python绘制两个0-1列表的维恩图并获取双1交集?
解决方法
你之前的问题在于venn2的subsets参数接收的不是布尔序列,而是三个数值的元组,分别对应:只属于集合a的元素数量、只属于集合b的元素数量、同时属于a和b的元素数量。
步骤1:计算维恩图所需的三个核心数值
针对你的0、1列表,我们可以通过以下方式计算:
- 交集数量(两者都为1):遍历两个列表的对应位置,统计同时为1的次数
- 只属于a的数量:a中1的总数减去交集数量
- 只属于b的数量:b中1的总数减去交集数量
完整代码示例
from matplotlib_venn import venn2 import matplotlib.pyplot as plt # 你的示例列表 a = [0,0,0,1,1,0,1] b = [0,1,0,1,0,1,1] # 计算三个关键数值 count_both = sum(x & y for x, y in zip(a, b)) # 对应位置都为1的数量,示例结果为2 count_only_a = sum(a) - count_both # 只a为1的数量,示例结果为3-2=1 count_only_b = sum(b) - count_both # 只b为1的数量,示例结果为4-2=2 # 绘制维恩图 venn2(subsets=(count_only_a, count_only_b, count_both), set_labels=('a', 'b'), alpha=0.5) plt.title("Venn Diagram for Binary Lists") plt.show()
说明
sum(x & y for x,y in zip(a,b))利用按位与运算,只有当x和y都为1时结果才为1,求和后得到交集数量,和手动遍历判断效果一致但更简洁。- 运行代码后会生成符合你需求的维恩图,其中交集部分显示的数值就是两个列表对应位置均为1的元素数。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

