Matplotlib:通过鼠标单击在图形上查找区域

时间:2015-05-18 14:53:58

标签: python matplotlib coordinates mouse intervals

假设我有一个绘制正弦和余弦函数的程序。 我希望能够选择由图形创建的子区间或区域,例如π/ 4&lt; x&lt; 5π/ 4或-3π/ 4 < x&lt; π/ 4。

所以,如果我有这个:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = plt.axes(xlim=(-10, 10), ylim=(-10, 10))
ax.set_aspect("equal")

x = np.array((np.linspace(-10,10,500)))
y = np.sin(x)

plt.plot(x,y)

y2 = np.cos(x)

plt.plot(x,y2)

plt.show()

我已经能够打印鼠标点击的坐标,但至于远远超过那个,我被卡住了。

def onclick(event):
    print('x=%f, y=%f'%(event.xdata, event.ydata))


fig.canvas.mpl_connect('button_press_event', onclick)

我怎么做: 1.存储鼠标点击的点 2.检查该点的间隔

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

有一些内置工具可以提供阻止鼠标输入(参见plt.ginput)。

另一种选择是自己动手。最简单的方法是创建一个帮助类来存储单击的值:

class ClickKeeper(object):
    def __init__(self):
        self.last_point = None
    def on_click(self, event):
        self.last_point = (event.xdata, event.ydata)

ck = ClickKeeper()
fig.canvas.mpl_connect('button_press_event', ck.onclick)

另一个选项(如果你嵌入一个大的GUI应用程序就是连接GUI的回调堆栈。

请参阅matplotlib.widgets (doc)(examples)了解一些内置工具,image_inspector项目(尽管名称通常是有用的gui工具),mpldatacursor和本书Interactive Applications in matplotlib(由其中一位核心开发人员撰写)。