Matplotlib-Venn 中的准确颜色混合

nev*_*int 6 python matplotlib venn-diagram matplotlib-venn

使用以下代码:

from matplotlib import pyplot as plt
from matplotlib_venn import venn2
from collections import OrderedDict

named_sets = {'x1': set(['foo','foo','bar',"pax"]), "x3" : set(['foo','qux','bar',"zoo"])}
od = OrderedDict(sorted(named_sets.iteritems()))

circlenm = ()
circlels = []
for k,v in od.iteritems():
    circlenm = circlenm + (k,)
    circlels.append(v)


c = venn2(subsets = circlels,set_labels = circlenm)
c.get_patch_by_id('10').set_color('red')
c.get_patch_by_id('01').set_color('blue')
c.get_patch_by_id('10').set_edgecolor('none')
c.get_patch_by_id('01').set_edgecolor('none')
c.get_patch_by_id('10').set_alpha(0.4)
c.get_patch_by_id('01').set_alpha(0.4)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我可以得到下图:

在此输入图像描述

在这里,我想将“蓝色”圆圈与“红色”圆圈混合。请注意,混合的结果是棕色的

但实际值应该是浅洋红色(下图是使用 default 创建的matplotlib_venn.venn3):

在此输入图像描述

我怎样才能正确地实现这一目标?

sam*_*gak 5

添加以下 3 行来设置交叉点的颜色和显示属性:

c.get_patch_by_id('11').set_color('magenta')
c.get_patch_by_id('11').set_edgecolor('none')
c.get_patch_by_id('11').set_alpha(0.4)
Run Code Online (Sandbox Code Playgroud)

如果你想要一个精确的颜色,那么你可以这样设置:

c.get_patch_by_id('11').set_color('#e098e1')
Run Code Online (Sandbox Code Playgroud)

补丁 ID 是一个位掩码,显示该区域位于哪些圆圈内。