matplotlib 从拾取事件获取子图

envsm3lx  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(101)

我有一个有四个子图的图,其中两个绑定在一个pick事件上,通过执行canvas.mpl_connect('pick_event', onpick),其中onpick是onpick(事件)处理程序。
现在,根据点击进入的两个子图中的哪一个,我必须激活一个不同的行为(即,如果选择来自第一个子图,则这样做,否则如果它来自第二个子图,则那样做),但我不知道如何做到这一点。有人能帮助我吗?

eqfvzcg8

eqfvzcg81#

下面是一个简短的例子:

import matplotlib.pyplot as plt
from random import random

def onpick(event):
    if event.artist == plt1:
        print("Picked on top plot")
    elif event.artist == plt2:
        print("Picked on bottom plot")

first = [random()*i for i in range(10)]
second = [random()*i for i in range(10)]

fig = plt.figure(1)
plt1 = plt.subplot(211)
plt.plot(range(10), first)

plt2 = plt.subplot(212)
plt.plot(range(10), second)

plt1.set_picker(True)
plt2.set_picker(True)
fig.canvas.mpl_connect('pick_event', onpick)

plt.show()

请注意,你必须在子图上调用set_picker(True)来触发这个事件!如果你不这样做,即使你在画布上设置了这个事件,也不会发生任何事情。
对于进一步的阅读,这里是PickEvent文档和来自matplotlib站点的pick handling demo

相关问题