0
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 メソッドで問題が発生しています。基本的にはカラーバーをクリックして、持っているコードでこんにちはを出力したいのですが、何が間違っているのですか?

4

1 に答える 1

3

canvas主な問題は、既にあるものを使用するのではなく、新しいものを作成していることですfig。あなたが望むことを行うには(少なくとも)2つの方法があります。

pick イベントに応答するように画像を設定することで、これを行うことができます(このチュートリアルの例 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)

または、 pick イベントに応答するようにを設定することもできます(カラーバー matplotlib python の onclick メソッドを参照)。

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)

イベントに携わるアーティストのタイプの違いに注意してください (したがって、簡単にアクセスできる情報も異なります)。

于 2013-02-17T16:55:59.817 に答える