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

如何用Matplotlib绘制A完全包含于C且与B相交的三元韦恩图?

如何用Matplotlib绘制集合A完全包含于C的三元韦恩图(不显示0值)

问题说明

需要绘制满足以下要求的三元韦恩图:

  • 集合A完全包含于集合C
  • A、C均与集合B相交
  • 图中不显示数值为0的标签

当前代码存在两个核心问题:

  1. venn3的subsets参数传递错误,导致图形无法呈现A包含于C的结构
  2. 未对0值标签做隐藏处理

解决方案

关键修正点

  1. 正确传递subsets参数:venn3的subsets需要传入7个区域的具体大小,顺序为:(只A, 只B, A∩B非C, 只C, A∩C非B, B∩C非A, A∩B∩C),对应标签ID的100, 010, 110, 001, 101, 011, 111。由于A完全包含于C,只A(100)区域的大小必然为0。
  2. 隐藏0值标签:遍历所有标签,若对应数值为0,则将文本设为空字符串。

修改后的代码

import matplotlib.pyplot as plt
from matplotlib_venn import venn3

# 假设df_A、df_B、df_C已提前定义
A = len(df_A)
B = len(df_B)
C = len(df_C)

# 获取各集合的path集合
set_path_A = set(df_A['path'])
set_path_B = set(df_B['path'])
set_path_C = set(df_C['path'])

# 验证A是否为C的子集(可选,用于确保逻辑正确性)
assert set_path_A.issubset(set_path_C), "集合A必须完全包含于集合C"

# 计算各区域大小
only_A = 0  # A完全包含于C,无仅属于A的部分
only_B = len(set_path_B - set_path_A - set_path_C)
only_C = len(set_path_C - set_path_A - set_path_B)
A_B_no_C = len(set_path_A & set_path_B - set_path_C)
A_C_no_B = len(set_path_A - set_path_B)  # A属于C,所以这部分是A中不与B相交的部分
B_C_no_A = len(set_path_B & set_path_C - set_path_A)
A_B_C = len(set_path_A & set_path_B & set_path_C)

# 整理标签字典
venn_labels = {
    '100': only_A,
    '010': only_B,
    '001': only_C,
    '110': A_B_no_C,
    '101': A_C_no_B,
    '011': B_C_no_A,
    '111': A_B_C
}

plt.figure(figsize=(8, 8))
# 传入正确的各区域大小
venn_diagram = venn3(
    subsets=(only_A, only_B, A_B_no_C, only_C, A_C_no_B, B_C_no_A, A_B_C),
    set_labels=('A', 'B', 'C')
)

# 设置标签文本,隐藏0值
for label_id, value in venn_labels.items():
    label = venn_diagram.get_label_by_id(label_id)
    if label:  # 确保标签存在(部分区域可能因大小为0不显示)
        label.set_text(str(value) if value != 0 else '')

plt.title("Three-Way Venn Diagram")
plt.show()

代码解释

  • 子集验证:添加assert语句确保A确实是C的子集,避免逻辑错误。
  • 区域计算:根据A包含于C的特性,直接将only_A设为0,简化计算逻辑。
  • 0值处理:通过循环遍历所有标签,对数值为0的标签设置空文本,实现隐藏效果。
  • 图形结构:当only_A为0时,matplotlib_venn会自动调整图形布局,将A完全绘制在C的内部。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:20:24