Matplotlib:通过鼠标单击在图形上查找区域
Matplotlib: Find a region on a graph by mouse click
假设我有一个绘制正弦和余弦函数的程序。
我希望能够 select 由图形创建的子区间或区域,例如 π/4 < x < 5π/4 或 -3π/4 < x < π/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. 查看点在什么区间
感谢任何帮助。
有一些内置工具可提供阻止鼠标输入的功能(请参阅 plt.ginput
)。
另一种选择是自己动手。最简单的方法是制作一个助手 class 来存储点击的值:
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) and (examples) for some fancy built in tools, the image_inspector project (which despite the name as generally useful gui tools), mpldatacursor
, and the book Interactive Applications in matplotlib(由核心开发人员之一撰写)。
假设我有一个绘制正弦和余弦函数的程序。 我希望能够 select 由图形创建的子区间或区域,例如 π/4 < x < 5π/4 或 -3π/4 < x < π/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. 查看点在什么区间
感谢任何帮助。
有一些内置工具可提供阻止鼠标输入的功能(请参阅 plt.ginput
)。
另一种选择是自己动手。最简单的方法是制作一个助手 class 来存储点击的值:
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) and (examples) for some fancy built in tools, the image_inspector project (which despite the name as generally useful gui tools), mpldatacursor
, and the book Interactive Applications in matplotlib(由核心开发人员之一撰写)。