Как я могу выбрать (выбрать) область диаграммы Венна
Можно ли выбрать или выбрать области диаграммы Венна, нажав на 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
(если вам нужны только три круга), но не оба.