Matplotlib делает поддержку some degree of event handling, а также «подцепить» события для компонентов сюжета (будь это диаграмма Венна или любой другой тип графика).
Объект диаграммы Venn, возвращаемый функцией venn3
, содержит поле patches
, в котором перечислены все объекты PathPatch
, которые содержат диаграмму. Вы можете сделать эти «pickable», как и любым другими объекты 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
(если вам нужны только три круга), но не оба.