Matplotlib 事件处理 线条选择器
这个例子展示了如何通过点击图例来改变图表。
我想做类似的事情,不过我想通过点击图表中的线条来实现,而不是点击图例。我尝试了这样做:
self.ax = self.fig.add_subplot(1,2,1)
data = NP.array(2,10) #filled with numbers
self.x = NP.arange(2)
for line in range(len(data[0,:])):
self.ax.plot(self.x, data[:,line], picker=5)
在每次循环中,我都会绘制一条额外的线。每条线由两个点组成,所以它画出了一条直线。但是现在每次循环,选择器都是一样的,所以无论我点击哪条线,我写的命令总是影响到第一条线。有没有办法改善这个问题呢?
1 个回答
7
你想要的效果是这样的吧?当你点击某一行的时候,它会被隐藏起来,然后当你再次点击那个“空白”的地方时,它又会显示出来。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots()
for i in range(1, 10):
ax.plot(x, i * x + x, picker=5)
def on_pick(event):
event.artist.set_visible(not event.artist.get_visible())
fig.canvas.draw()
fig.canvas.callbacks.connect('pick_event', on_pick)
plt.show()