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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:30:51