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

如何分离Matplotlib绘制的韦恩图各区域或单独高亮指定区域?

如何在matplotlib_venn中单独提取或高亮韦恩图的指定区域

完全可以实现,matplotlib_venn绘制韦恩图后返回的对象包含了所有区域的图形元素,通过操作这些元素就能完成提取区域或高亮指定区域的需求。

先明确区域对应关系

对于双集合韦恩图(venn2),各个区域的ID如下:

  • A:左侧集合的非交集部分(仅属于set1的区域)
  • B:右侧集合的非交集部分(仅属于set2的区域)
  • AB:两个集合的交集区域

基础代码优化

先把你提供的代码去重并完善,确保能获取到韦恩图对象:

!pip install matplotlib_venn
from matplotlib_venn import venn2
import matplotlib.pyplot as plt

set1_size = 20
set2_size = 25
intersection_size = 5

# 创建韦恩图并保存返回的对象
venn_obj = venn2(subsets=(set1_size, set2_size, intersection_size))

一、提取指定区域

通过get_patch_by_id()方法可以直接获取对应区域的图形补丁(Patch)对象,之后可以查看其属性或用于后续操作:

# 获取各个区域的补丁对象
patch_only_set1 = venn_obj.get_patch_by_id('A')   # 左侧非交集
patch_only_set2 = venn_obj.get_patch_by_id('B')   # 右侧非交集
patch_intersection = venn_obj.get_patch_by_id('AB') # 交集

# 示例:查看区域属性
print("左侧区域当前颜色:", patch_only_set1.get_facecolor())
print("交集区域的面积:", patch_intersection.get_area())

# 若需要提取路径数据用于其他绘图,可使用get_path()
intersection_path = patch_intersection.get_path()

二、高亮指定区域

有两种常见方式:直接修改指定区域颜色,或者先将所有区域设为空白再单独高亮目标区域。

方式1:直接修改指定区域颜色

直接给目标区域设置新的颜色即可:

# 修改左侧非交集为紫色,交集为黄色,右侧非交集为绿色
patch_only_set1.set_facecolor('purple')
patch_intersection.set_facecolor('yellow')
patch_only_set2.set_facecolor('green')

# 可选:修改边框样式
patch_intersection.set_edgecolor('black')
patch_intersection.set_linewidth(2)

plt.show()

方式2:先设为空白再高亮指定区域

先把所有区域设为完全透明(空白),再单独恢复目标区域的颜色:

# 第一步:将所有区域设为透明
for patch in venn_obj.set_colors:
    patch.set_alpha(0)  # 透明度0表示完全透明

# 第二步:单独高亮交集区域为黄色
patch_intersection.set_facecolor('yellow')
patch_intersection.set_alpha(1)  # 恢复不透明度为1(完全不透明)

# 可选:同时高亮左侧非交集为紫色
patch_only_set1.set_facecolor('purple')
patch_only_set1.set_alpha(1)

plt.show()

内容的提问来源于stack exchange,提问作者Uk rain troll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:54:57