matplotlibで描いたグラフ上の座標を取得する方法

matplotlibで描いたグラフの上で、マウスをクリックした位置の座標の値を取得したい。matplotlibでグラフを描くと、マウス位置の座標が画面の左下に自動的に表示されている(図1)。なので、座標の値を取得するのは可能なはず。

図1:matplotlibでのグラフの描画例

そこで、マニュアルの10章(Event handling and picking — Matplotlib 3.0.0 documentation)を見ると、次の例題が...。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.random.rand(10))

fig.show()

def onclick(event):
    print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f' %(
    event.button, event.x, event.y, event.xdata, event.ydata)

cid = fig.canvas.mpl_connect('button_press_event', onclick)


これで、マウスボタンを押した位置での以下の情報を取得できる。

event.button 押されたマウスのボタン(左側から0, 1, 2の番号となる)
event.x canvasの左からのx座標(単位はピクセル
event.y canvasの下からのy座標(単位はピクセル
event.xdata 描いたグラフ上でのx座標
event.ydata 描いたグラフ上でのy座標

実際に上のコードを実行し、マウスで適当な位置をクリックすると、これらの情報が表示される。canvas上であっても描いたグラフの外をクリックするとエラーになるが...。


図2:上のコードを実行したとき

ここで用いたbutton_press_eventの他に、使用可能なイベントがいくつかあるので、いろいろなことができそうだ。