построить фактический набор элементов в Python, а не количество элементов - PullRequest
1 голос
/ 17 апреля 2019

Я написал эту маленькую функцию:

def sets():
    set1 = random.sample(range(1, 50), 10)
    set2 = random.sample(range(1, 50), 10)
    return(set1,set2)

sets()

Вывод этой функции выглядит следующим образом:

([24, 29, 43, 42, 45, 28, 26, 3, 8, 21],
 [22, 37, 38, 44, 25, 42, 29, 7, 35, 9])

Я хочу построить это на двухсторонней диаграмме Венна. Я знаю, как построить ЧИСЛА перекрытия между наборами, используя matplotlib, то есть используя этот точный код; однако вместо этого я хочу нанести на график ФАКТИЧЕСКИЕ ЗНАЧЕНИЯ.

т.е.. Перекрытие между ними должно читаться следующим образом: 29,42, так как это два общих элемента, а не число 2, для представления числа перекрывающихся чисел.

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

3 голосов
/ 17 апреля 2019

Возможным решением является вывод меток вместо заданного размера.С пакетом matplotlib_venn вы можете сделать что-то вроде этого:

import matplotlib.pyplot as plt
from matplotlib_venn import venn2
import random

set1 = set(random.sample(range(1, 50), 10))
set2 = set(random.sample(range(1, 50), 10))
venn = venn2([set1,set2], ('Group A', 'Group B'))

venn.get_label_by_id('100').set_text('\n'.join(map(str,set1-set2)))
venn.get_label_by_id('110').set_text('\n'.join(map(str,set1&set2)))
venn.get_label_by_id('010').set_text('\n'.join(map(str,set2-set1)))
plt.axis('on')
plt.show()

Мы получаем доступ к меткам по двоичному идентификатору, который обозначает наборы.enter image description here

1 голос
/ 17 апреля 2019

Поведение по умолчанию пакета venn2 состоит в том, чтобы напечатать размер перекрытия двух наборов. Вот строка исходного кода, где эти размеры добавляются к диаграмме Венна: https://github.com/konstantint/matplotlib-venn/blob/master/matplotlib_venn/_venn2.py#L247

Чтобы распечатать перекрывающиеся числа, вам нужно изменить функцию compute_venn2_subsets (a, b) в этом файле. Замените возвращенный аргумент compute_venn2_subsets (a, b) на:

([val for val in a if val not in b], [val for val in a if val in b], [val for val in b if val not in a])

вместо установленных размеров, которые он возвращает прямо сейчас. Если вы хотите печатать только перекрывающиеся столбцы, сделайте compute_venn2_subsets (a, b) return

("", [val for val in a if val in b], "")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...