matplotlib_venn – это пакет Python, который предоставляет функции для построения двухклассных и трехклассных диаграмм Венна. Он работает на версиях 2.x и 3.x.
Он легко устанавливается с помощью pip:
pip install matplotlib_venn
Эта команда также установит необходимые зависимости: SciPy, NumPy и matplotlib.
Содержание
Построение диаграммы
Для построения диаграммы Венна достаточно выполнить следующее.
from matplotlib import pyplot as plt
from matplotlib_venn import venn2
venn2((1, 1, 1))
plt.show()
Code language: JavaScript (javascript)
Функция venn2() генерирует диаграмму из двух множеств, как показано ниже.
Аргумент указывает на относительный размер трех подмножеств в данном порядке: Ab (слева), aB (справа), AB (пересечение).
Например, кортеж (1, 2, 1) нарисует множество B в два раза больше A.
Для идентификации каждого из подмножеств (трех в двухсетовых диаграммах) модуль использует номенклатуру, которая состоит из проставления 1 для обозначения того, что раздел включен в набор, и 0 для обозначения того, что он исключен.
Таким образом, следуя порядку “ABC”, подмножество 10 – это подмножество слева (то, которое принадлежит A, но не принадлежит B); 01 – подмножество справа (то, которое принадлежит B, но не принадлежит A); и 11 – подмножество посередине (пересечение).
Учитывая это, в качестве первого аргумента мы также можем передать словарь, указывающий размер каждого из подмножеств.
venn2({"10": 1, "01": 2, "11": 1})
Code language: JavaScript (javascript)
Параметр set_labels позволяет изменить названия наборов, отображаемых на диаграмме.
venn2((1, 1, 1), set_labels=("X", "Z"))
Code language: JavaScript (javascript)
Указание set_labels=None удаляет ссылки из изображения.
set_colors определяет цвет множеств.
venn2((1, 1, 1), set_colors=("#888888", "#0000FF"))
Code language: JavaScript (javascript)
Цвет пересечений рассчитывается автоматически.
Обратите внимание, что по умолчанию они имеют значение alpha 0,4, т.е. прозрачность 60%.
В этом параметре можно использовать значения от 0,0 до 1,0.
# Отключает прозрачность.
venn2((1, 1, 1), set_colors=("#888888", "#0000FF"), alpha=1)
Code language: PHP (php)
Функция venn2() возвращает экземпляр класса под названием VennDiagram.
В частности, интересующие нас методы – get_label_by_id() и get_patch_by_id().
Оба принимают подмножество и возвращают экземпляры matplotlib.text.Text и matplotlib.patches.PathPatch, соответственно.
Из них мы можем индивидуально изменять внешний вид каждого подмножества.
Например, следующий код изменяет цвет и текст подмножества 11 (т.е. AB).
from matplotlib import pyplot as plt
from matplotlib_venn import venn2
diagram = venn2((1, 1, 1))
diagram.get_label_by_id("11").set_text("Пересечение")
diagram.get_label_by_id("11").set_color("#FFFFFF")
plt.show()
Code language: JavaScript (javascript)
Или изменить цвет определенного подмножества:
# Устанавливает цвет набора B.
diagram.get_patch_by_id("01").set_color("#0000FF")
Code language: CSS (css)
Функция venn3() по сути аналогична.
Теперь первым аргументом будет кортеж из семи элементов, соответствующих семи подмножествам в следующем порядке: Abc, aBc, ABc, abC, AbC, AbC, aBC, ABC.
from matplotlib import pyplot as plt
from matplotlib_venn import venn3
diagram = venn3((1, 1, 1, 1, 1, 1, 1))
plt.show()
Code language: JavaScript (javascript)
Таким же образом для идентификации каждого из подмножеств теперь используются три цифры в порядке A, B, C. На рисунке ниже показано каждое из них с соответствующим идентификатором.
from matplotlib import pyplot as plt
from matplotlib_venn import venn3
diagram = venn3((3, 3, 1, 3, 1, 1, 1))
for subset in ("111", "110", "101", "100", "011", "010", "001"):
diagram.get_label_by_id(subset).set_text(subset)
plt.show()
Code language: JavaScript (javascript)
Аргументы alpha, set_labels и set_colors также применяются к этой функции.
Последние два логично требуют трехэлементных кортежей.
Другие варианты
Функции venn2_circles() и venn3_circles() рисуют контуры соответствующих подмножеств в соответствии с первым аргументом.
from matplotlib import pyplot as plt
from matplotlib_venn import venn3_circles
venn3_circles((1, 1, 1, 1, 1, 1, 1))
plt.show()
Code language: JavaScript (javascript)
Их можно использовать вместе с venn2() и venn3() для добавления границ к диаграммам.
Кроме того, они поддерживают параметры color, alpha, linewidth и linestyle для задания цвета, прозрачности, размера (в пикселях) и типа линий. Возможными значениями для linewidth являются “:”, “-.”, “–” и “-“.
from matplotlib import pyplot as plt
from matplotlib_venn import venn3, venn3_circles
subsets = (3, 3, 1, 3, 1, 1, 1)
venn3(subsets)
venn3_circles(subsets, color="#008000", alpha=1, linestyle="-.", linewidth=3)
plt.show()
Code language: JavaScript (javascript)