Язык программирования Python

Построение диаграммы Венна с помощью matplotlib в Python

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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *