[ipywidgets] 21. 画像上でクリックした点の座標と値をOutputで表示

ipywidgets

はじめに

jupyter notebook, labのパラメータを対話的に表示できる機能(ipywidgets Output)で画像上でクリックした点の座標と値を表示する方法について説明する。座標の所得には、fig.canvas.mpl_connectの(‘button_press_event’, onclick)を用いた。

コード

コードをダウンロード(.pyファイル)コードをダウンロード(.ipynbファイル)

解説

モジュールのインポートなど

jupyter labでインタラクティブな操作をするには、冒頭で%matplotlib widgetとする。
jupyter lnotebookの場合は%matplotlib notebookとなる。

バージョン

画像データの作成と表示

10 x 10のサイズの画像に強度の高い山がひとつある画像を作成する。

interpolation=’nearest’とすることで補間せずにデータそのものの画像をimshowで表示する。

カラーバーの表示

make_axes_locatableを使ってカラーバーを追加する。画像の上に表示するので、orientation=’horizontal’として、cax.xaxis.set_ticks_position(‘top’)とすることでカラーバーの目盛りを上側とし、画像と重ならないようにした。

ipywidgetsの設定

ipywidgetsのOutputを設定して、display(out)でOutputを表示する。インタラクティブに値を表示するには、@out.capture()とする必要がある。clear_output=Trueで古いものは削除され、常に新しいものが表示される。

クリック時の動作の設定

printでクリックイベントで取得できる情報を取得する。
画像の値については、im[int(np.rint(event.ydata)),int(np.rint(event.xdata))]にようにnp.rintでクリックした座標の値を四捨五入しインデックスとし、画像中の値を求めている。
なお、jupyter labの場合、defaultでx,yと画像の値が画像下に表示される。

button_press_eventの有効化

fig.canvas.mpl_connect(‘button_press_event’, onclick)で画像上をクリックするとコールバック関数が呼び出され、outputにprint()した内容が表示される。

button_press_eventの無効化

fig.canvas.mpl_disconnect(cid)でクリックイベントが無効となる。

@out.capture(clear_output=False)とした場合

クリックするたびに新しい情報が下に追記される。

jupyter notebookの場合

参考

Event handling and picking — Matplotlib 3.2.0 documentation
Output widgets: leveraging Jupyter’s display system — Jupyter Widgets 7.5.1 documentation
[matplotlib] 55. Colorbarの目盛りとそのラベルの設定
matplotlibのColorbarで任意の目盛りとラベルを設定する方法について説明する。

コメント