Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib从多个系列拾取事件_Python_Matplotlib_Picking - Fatal编程技术网

Python Matplotlib从多个系列拾取事件

Python Matplotlib从多个系列拾取事件,python,matplotlib,picking,Python,Matplotlib,Picking,我正在做一个散点图,我想点击各个点做点什么。这类似于现有的示例代码 我已经实现了一个on_pick方法 def on_pick(event): ind = event.ind for i in ind: ...do something here with blue or red data... 然而,我被卡住了,因为我把多个系列(红色和蓝色)放在同一个情节中 fig, ax = plt.subplots() ax.set_title('click on a p

我正在做一个散点图,我想点击各个点做点什么。这类似于现有的示例代码

我已经实现了一个on_pick方法

def on_pick(event):
    ind = event.ind
    for i in ind:
        ...do something here with blue or red data...
然而,我被卡住了,因为我把多个系列(红色和蓝色)放在同一个情节中

fig, ax = plt.subplots()
ax.set_title('click on a point...')
line, = ax.plot(red_xs, red_ys, 'o', picker=5, color='red') 
line, = ax.plot(blue_xs, blue_ys, 'o', picker=5, color='blue')  
event.ind是整数的集合。它们是一系列的索引。然而,似乎没有办法确定它们是哪个系列的索引

一定有办法做到这一点。有人知道诀窍吗

多谢各位 Peter

指向acutally的you链接告诉您如何知道哪一行是哪一行。上面说

thisline = event.artist
xdata = thisline.get_xdata()
ydata = thisline.get_ydata()
ind = event.ind
因此,
ind
将索引该行的任何内容

举一个更彻底的例子

line1, = ax.plot(self.red['False'], self.red['True'], 'o', picker=5, color='red') 
line2, = ax.plot(self.blue['False'], self.blue['True'], 'o', picker=5, color='blue') 

dic = {line1 : self.red, line2 : self.blue}

def on_pick(self,event):
    series = dic[event.artist]
    # do something with series
    for i in event.ind:
         print(series[i])


fig.canvas.mpl_connect('pick_event', on_pick)
指向acutally的you链接告诉您如何知道哪一行是哪一行。上面说

thisline = event.artist
xdata = thisline.get_xdata()
ydata = thisline.get_ydata()
ind = event.ind
因此,
ind
将索引该行的任何内容

举一个更彻底的例子

line1, = ax.plot(self.red['False'], self.red['True'], 'o', picker=5, color='red') 
line2, = ax.plot(self.blue['False'], self.blue['True'], 'o', picker=5, color='blue') 

dic = {line1 : self.red, line2 : self.blue}

def on_pick(self,event):
    series = dic[event.artist]
    # do something with series
    for i in event.ind:
         print(series[i])


fig.canvas.mpl_connect('pick_event', on_pick)

这是我找到的解决办法。它看起来很笨重,但也许是最好的

通过编写“自定义选择器”,可以向事件添加元数据。在这里我加上“ind”和“series”

然后可以在每个散点图上附加不同的“自定义选择器”

    line, = ax.plot(self.red['False'], self.red['True'], 'o', picker=lambda line,mouseevent: self.picker(line,mouseevent,self.red), color='red')
    line, = ax.plot(self.blue['False'], self.blue['True'], 'o', picker=lambda line,mouseevent: self.picker(line,mouseevent,self.blue), color='blue')
然后在on_pick()函数中提取元数据


这是我找到的解决办法。它看起来很笨重,但也许是最好的

通过编写“自定义选择器”,可以向事件添加元数据。在这里我加上“ind”和“series”

然后可以在每个散点图上附加不同的“自定义选择器”

    line, = ax.plot(self.red['False'], self.red['True'], 'o', picker=lambda line,mouseevent: self.picker(line,mouseevent,self.red), color='red')
    line, = ax.plot(self.blue['False'], self.blue['True'], 'o', picker=lambda line,mouseevent: self.picker(line,mouseevent,self.blue), color='blue')
然后在on_pick()函数中提取元数据


谢谢你,亲爱的。我想我的问题不清楚。我需要向事件附加额外的元数据,在我的例子中,如果生成x和y的Pandas数据帧。我找到了一种方法。也许你知道一个更好的方法。如果你的解决方案有效,那就好了。我的观点是,在
on_pick
函数中,您已经有了可用的数据,如
xdata
ydata
。如果您需要原始数据,可以使用艺术家到原始数据的简单映射。我更新了答案,以展示如何做到这一点。这是一个很好的答案,event.artist实际上展示了该活动所涉及的系列。谢谢你,IOBE。我想我的问题不清楚。我需要向事件附加额外的元数据,在我的例子中,如果生成x和y的Pandas数据帧。我找到了一种方法。也许你知道一个更好的方法。如果你的解决方案有效,那就好了。我的观点是,在
on_pick
函数中,您已经有了可用的数据,如
xdata
ydata
。如果您需要原始数据,可以使用艺术家到原始数据的简单映射。我更新了答案,以展示如何做到这一点。这是一个很好的答案,event.artist实际上显示了该活动是在哪个系列上进行的。