0

是否可以通过单击 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()
4

1 回答 1

0

Matplotlib 确实支持某种程度的事件处理以及绘图组件的“选择”事件(无论是维恩图还是任何其他类型的绘图)。

从函数返回的维恩图对象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(如果您只需要三个圆圈),但不要同时使用两者。

于 2016-05-25T14:53:49.270 回答