Skip to content Skip to sidebar Skip to footer

Onclick Function 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.a

Solution 1:

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.

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)

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).

Post a Comment for "Onclick Function Matplotlib"