Python中如何获取matplotlib三元韦恩图各交集的元素列表
提取三元韦恩图各交集区域的元素列表
嘿,我明白你想从用matplotlib_venn绘制的三元韦恩图里,精准获取每个交集区域对应的元素列表对吧?其实不用依赖绘图对象的内部属性,直接利用Python的集合运算就能轻松搞定,而且结果和韦恩图的区域完全对应。下面结合你的示例代码一步步来:
第一步:明确韦恩图7个区域对应的集合运算
三元韦恩图总共有7个独立区域,每个区域对应的集合逻辑如下:
- 仅属于A的元素:
A - B - C(A减去B和C的所有元素) - 仅属于B的元素:
B - A - C - 仅属于C的元素:
C - A - B - A和B的交集(不含C):
A & B - C - A和C的交集(不含B):
A & C - B - B和C的交集(不含A):
B & C - A - A、B、C三者的共同交集:
A & B & C
第二步:结合你的示例代码实现提取
我先把你示例里的C补一个具体值方便演示,然后写出完整的提取代码:
from matplotlib import pyplot as plt from matplotlib_venn import venn3, venn3_circles # 你的原始集合 A = set(['DPEP1', 'CDC42BPA', 'GNG4', 'RAPGEFL1', 'MYH7B', 'SLC13A3', 'PHACTR3', 'SMPX', 'NELL2', 'PNMAL1', 'KRT23', 'PCP4', 'LOX', 'CDC42BPA']) B = set(['ABLIM1','CDC42BPA','VSNL1','LOX','PCP4','SLC13A3']) # 补全C的示例值 C = set(['CDC42BPA', 'LOX', 'PHACTR3', 'SMPX', 'NEW_GENE']) # 提取各个区域的元素 only_A = A - B - C only_B = B - A - C only_C = C - A - B A_B_no_C = A & B - C A_C_no_B = A & C - B B_C_no_A = B & C - A A_B_C_all = A & B & C # 打印结果 print("仅属于A的元素:", only_A) print("仅属于B的元素:", only_B) print("仅属于C的元素:", only_C) print("A和B交集(不含C):", A_B_no_C) print("A和C交集(不含B):", A_C_no_B) print("B和C交集(不含A):", B_C_no_A) print("三者共同交集:", A_B_C_all)
第三步:(可选)关联venn3的绘图区域ID
如果你想把提取的元素和venn3绘图时的区域ID对应起来(比如后续要给图加标注),venn3返回的对象支持用区域ID('100'对应仅A,'010'对应仅B,'001'对应仅C,'110'对应A∩B不含C,'101'对应A∩C不含B,'011'对应B∩C不含A,'111'对应三者交集)来关联元素:
# 绘制韦恩图 venn_plot = venn3([A, B, C], ('Set A', 'Set B', 'Set C')) venn3_circles([A, B, C], linestyle='dashed', linewidth=1, color='gray') # 用字典关联区域ID和元素列表 region_elements = { '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_all } # 示例:给每个区域添加元素列表标注(可选) for region_id, elements in region_elements.items(): if elements: label = venn_plot.get_label_by_id(region_id) if label: # 把元素转成换行的字符串 elem_text = '\n'.join(elements) # 调整标注位置避免重叠 label.set_text(elem_text) label.set_fontsize(8) plt.title("Triple Venn Diagram with Element Labels") plt.show()
这样你既能拿到每个区域的元素列表,还能把元素直接显示在韦恩图上,非常方便!
内容的提问来源于stack exchange,提问作者daniel_hck
相关产品推荐
相关产品推荐

