【发布时间】:2017-03-18 15:29:35
【问题描述】:
我有以下类通过 y 轴绘制一条垂直线,因此当我单击它时,会在该位置绘制一条水平线。 我的目标是让 y 坐标实际打印在绘制水平线的 y 轴上。为了测试,我正在尝试使用 y 坐标打印标题,但它没有按预期工作。
我真正想要完成的是使条形图上的 y 轴可点击,以便用户可以选择 y 轴上的一个点,然后发生一堆“东西”(包括绘制一条水平线)。除了通过 y 轴绘制一条可绘制的垂直线以使其可拾取之外,我真的没有其他方法可以实现这一点。这看起来相当笨拙,但我没有用任何其他方法取得任何成功。
import matplotlib.pyplot as plt
class PointPicker(object):
def __init__(self):
self.fig = plt.figure()
self.ax = self.fig.add_subplot(111)
self.lines2d, = self.ax.plot((0, 0), (-6000, 10000), 'k-', linestyle='-',picker=5)
self.fig.canvas.mpl_connect('pick_event', self.onpick)
self.fig.canvas.mpl_connect('key_press_event', self.onpress)
fig.canvas.mpl_connect('button_press_event', self.onclick)
def onpress(self, event):
"""define some key press events"""
if event.key.lower() == 'q':
sys.exit()
def onpick(self,event):
x = event.mouseevent.xdata
y = event.mouseevent.ydata
L = self.ax.axhline(y=y)
print(y)
ax.axvspan(0, 0, facecolor='y', alpha=0.5, picker=10)
self.fig.canvas.draw()
def onclick(event):
self.fig.canvas.set_title('Selected item came from {}'.format(event.ydata))
print(event.xdata, event.ydata)
if __name__ == '__main__':
plt.ion()
p = PointPicker()
plt.show()
假设没有其他方法可以实现我的最终结果,那么这种方法一切正常,除了我无法终生打印标题(使用self.fig.canvas.set_title('Selected item came from {}'.format(event.ydata))。
【问题讨论】:
标签: python matplotlib event-handling