onclick 函数 matplotlib

onclick 函数 matplotlib

问题描述:

cmap = mpl.colors.ListedColormap([[1,0,0], [0,0,1], [0,1,0], [1,1,0]])

    self.fig = plt.figure(figsize=(6,6))
self.ax = self.fig.add_axes([0.1, 0.1, 0.8, 0.8])
x_ax = self.fig.add_axes([0.05, 0.1, 0.05, 0.8])
x2_ax = self.fig.add_axes([0.05, 0.1, 0.05, 0.8])
y_ax = self.fig.add_axes([0.1, 0.05, 0.8, 0.05])
x_ax.imshow(xcolors, cmap=cmap, interpolation='none')
x_ax.set_aspect('auto')
x_ax.set_position((0.1,0.1,0.05,0.8))
y_ax.imshow(ycolors, cmap=cmap, interpolation='none')
x_ax.set_picker(5)
def on_pick(event):
    print hello


self.canvas = FigureCanvas(self, -1, self.fig)
self.canvas.mpl_connect('Pick_event',on_pick)

我的 onclick 方法有问题基本上我想点击颜色条并打印出你好使用我拥有的代码,它什么都不做我做错了什么?

I am having trouble with my onclick method basically I want to click on the colorbar and for it to print out hello with the code i have, it does nothing what have I done wrong?

主要问题是您正在创建一个新的 canvas 而不是使用已有的 fig.有(至少)两种方法可以做你想做的事.

The primary problem is that you are creating a new canvas instead of using the one fig already has. There are (atleast) two ways to do what you want.

您可以通过设置图像来响应pick事件来实现这一点(参见本教程 示例 4):

You can do this by setting the images to respond to the pick event (see this tutorial example 4):

cmap = mpl.colors.ListedColormap([[1,0,0], [0,0,1], [0,1,0], [1,1,0]])

xcolors = arange(15).reshape(15,1)
ycolors = arange(15).reshape(1,15)
fig = plt.figure(figsize=(6,6))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
x_ax = fig.add_axes([0.05, 0.1, 0.05, 0.8])
x2_ax = fig.add_axes([0.05, 0.1, 0.05, 0.8])
y_ax = fig.add_axes([0.1, 0.05, 0.8, 0.05])
x_ax.imshow(xcolors, cmap=cmap, interpolation='none', picker=True)
x_ax.set_aspect('auto')
x_ax.set_position((0.1,0.1,0.05,0.8))
y_ax.imshow(ycolors, cmap=cmap, interpolation='none', picker=True)
def on_pick(event):
    artist = event.artist
    if isinstance(artist, matplotlib.image.AxesImage):
        im = artist
        A = im.get_array()
        print A.shape,
    print 'hello'


canvas = fig.canvas
canvas.mpl_connect('pick_event',on_pick)

或者,您可以设置以响应选择事件(请参阅colorbar matplotlib python 上的 onclick 方法) 如此:

Alternatively, you can set the axes to respond to the pick event (see onclick method on a colorbar matplotlib python) as such:

cmap = mpl.colors.ListedColormap([[1,0,0], [0,0,1], [0,1,0], [1,1,0]])

xcolors = arange(15).reshape(15,1)
ycolors = arange(15).reshape(1,15)
fig = plt.figure(figsize=(6,6))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
x_ax = fig.add_axes([0.05, 0.1, 0.05, 0.8])
x2_ax = fig.add_axes([0.05, 0.1, 0.05, 0.8])
y_ax = fig.add_axes([0.1, 0.05, 0.8, 0.05])
x_ax.imshow(xcolors, cmap=cmap, interpolation='none')
x_ax.set_aspect('auto')
x_ax.set_position((0.1,0.1,0.05,0.8))
y_ax.imshow(ycolors, cmap=cmap, interpolation='none')

x_ax.set_picker(5)
y_ax.set_picker(5)

def on_pick(event):
    artist = event.artist
    if isinstance(artist, matplotlib.axes.Axes):

        print event.mouseevent.ydata,
        print event.mouseevent.xdata,
    print 'hello'


canvas = fig.canvas
canvas.mpl_connect('pick_event',on_pick)

请注意活动所携带的艺术家类型的不同(以及您可以轻松访问的信息).

Notice the difference in the type of artist that the event is carrying with it (and hence the information you have easy access to).