Как я могу выбрать (выбрать) область диаграммы Венна

Можно ли выбрать или выбрать области диаграммы Венна, нажав на Python?

from matplotlib import pyplot as plt
import numpy as np
from matplotlib_venn import venn3, venn3_circles
plt.figure(figsize=(4,4))
v = venn3(subsets=(1, 2, 3, 4, 5, 6, 7), set_labels = ('A', 'B', 'C'))
c = venn3_circles(subsets=(1, 2, 3, 4, 5, 6, 7), linestyle='dashed')
plt.title("Sample Venn diagram")
plt.show()

1 ответ

Решение

Matplotlib действительно поддерживает некоторую степень обработки событий, а также "выбирает" события для компонентов графика (будь то диаграмма Венна или любой другой тип графика).

Объект диаграммы Венна, возвращенный из venn3 функция содержит поле patches, который перечисляет все PathPatch объекты, которые составляют диаграмму. Вы можете сделать их "выбираемыми", как и любые другие объекты патчей Matplotlib:

from matplotlib import pyplot as plt
import numpy as np
from matplotlib_venn import venn3

# Create the diagram
plt.figure(figsize=(4,4))
v = venn3(subsets=(1, 2, 3, 4, 5, 6, 7), set_labels = ('A', 'B', 'C'))
plt.title("Sample Venn diagram")

# Make all patches of the diagram pickable
for p in v.patches:
    if p is not None: p.set_picker(True)

# This is the event handler
def on_pick(event):
    p = event.artist
    ec = p.get_edgecolor()
    p.set_edgecolor('black' if ec[-1] == 0.0 else 'none')
    plt.gcf().canvas.draw()   # Redraw plot

# Connect event handler
plt.gcf().canvas.mpl_connect('pick_event', on_pick)

# Show the plot
plt.show()

venn3_circles функция возвращает список из трех Circle патчи, которые нарисованы на "правильно сегментированной" диаграмме. Вы также можете сделать их выбираемыми, но тогда вам придется как-то разбираться с "конфликтами выбора". Следовательно, в общем, я бы предложил вам использовать либо venn3 (если вам нужно 7 цветных патчей) или venn3_circles (если вам нужны только три круга), но не оба.

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