2015-04-21 3 views
3

С помощью следующего кода:Точная смешения цветов в Matplotlib-Венна

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() 

я могу получить следующий рисунок:

enter image description here

Здесь я хотел бы, чтобы смешаться круги «синий» с «красным». Обратите внимание, что результатом смешивания является brown.

Но фактическое значение должно быть светло-пурпурные (рисунок ниже создается с использованием по умолчанию matplotlib_venn.venn3):

enter image description here

Как я могу достичь, что правильно?

ответ

2

Добавьте эти 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) 

Если вы хотите точный цвет, то вы можете установить, как это:

c.get_patch_by_id('11').set_color('#e098e1') 

Пластырь идентификатор битовая маска, показывающая, какие круги находятся внутри.

Смежные вопросы