3

2 つのグラフと、グラフが表示されているキャンバスの座標を出力するマウス モーション関数があります。マウスがグラフの1つの上に置かれたときにのみマウスモーション関数が呼び出されるようにするにはどうすればよいですか。

self.ax.imshow(matrix,cmap=plt.cm.Greys_r, interpolation='none')
self.ax.imshow(matrix2,cmap=plt.cm.Greys_r, interpolation='none')

def motion_capture(event)
    print event.xdata
    print event.ydata


self.canvas = FigureCanvas(self,-1,self.fig)
self.canvas.mpl.connect('Motion', motion_capture)

現時点では、マウスがキャンバスに沿って移動しているときに呼び出されます。どちらのグラフにもない場合はnone、座標が出力されます。グラフの1つに対してのみ呼び出されるようにするにはどうすればよいですか

4

1 に答える 1

1

あなたの例からは明らかではありませんが、私はあなたが別々の軸/サブプロットを持っていると仮定しています。(そうでない場合は、もう少し行う必要があります。)

その場合、イベントが使用している軸を検出するのが最も簡単event.inaxesです。

簡単な例として:

import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(ncols=2)

axes[0].imshow(np.random.random((10,10)), interpolation='none')
axes[1].imshow(np.random.random((10,10)), interpolation='none')

def motion_capture(event):
    if event.inaxes is axes[0]:
        print event.xdata
        print event.ydata


fig.canvas.mpl_connect('motion_notify_event', motion_capture)

plt.show()
于 2013-03-08T17:08:17.090 に答える