这必须在某处回答,但我似乎找不到任何东西。总之...
我有两个事件和处理程序:
我的问题是注册到onclick
'的'button_press_event
功能。触发图像轴上的单击并单击按钮轴。例如,下面的代码将在单击按钮时在图像轴上打印和绘制点(使用按钮轴的坐标)。它们出现在图像轴的左上角。
有没有办法确定调用事件的轴,以便在单击按钮时调用onclick
,但在图像时调用 点击轴?
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import Button
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(np.random.rand(512,512), cmap=plt.cm.gray)
ax.set_xlim(0,512)
ax.set_ylim(512,0)
buttonax = plt.axes([0.8,0.025,0.1,0.04])
button = Button(buttonax, 'click')
def onclick(event):
x,y = event.xdata, event.ydata
print x,y
# plot the points
ax.plot(x, y, 'or', ms=7)
plt.draw()
def button_func(event):
print "button is clicked"
fig.canvas.mpl_connect('button_press_event',onclick)
button.on_clicked(button_func)
plt.show()
答案 0 :(得分:2)
Matplotlib事件存储inaxes
属性,该属性是事件发生时的父Axes
实例,如果事件不在轴上,则存储None
。
在您的情况下,您要检查类似于以下内容的内容:
if event.inaxes is ax:
...
有一点需要注意:如果你有重叠的轴(例如插入轴或任何涉及twinx
/ twiny
的东西),只有上轴会响应事件(& #34;鞋面"就zorder而言,如果我没记错的话)。如果事件结束,您将无法获得所有轴的列表,或者如果它超过一个轴,则无法获得多个回调。