Точное смешение цветов в 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()

Я могу получить следующую цифру:

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

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

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

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

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

Передайте цвета непосредственно вvenn2при создании диаграммы черезset_colorsаргумент, то он автоматически выполнит смешивание цветов:

      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"])}

circlenm = ()
circlels = []

for k,v in named_sets.items():
    circlenm = circlenm + (k,)
    circlels.append(v)

c = venn2(
    subsets = circlels,
    set_labels = circlenm,
    set_colors=("red", "blue")
)
plt.show()

Другие вопросы по тегам