Python Matplotlib从多个系列拾取事件
我正在做一个散点图,我想点击各个点做点什么。这类似于现有的示例代码 我已经实现了一个on_pick方法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
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实际上显示了该活动是在哪个系列上进行的。