[matplotlib] 82. マウスイベントで画像上の任意の位置に四角を表示

matplotlib

はじめに

matplotlibのbutton_press_event、button_release_event、motion_notify_eventで、画像の任意の位置に四角をインタラクティブに表示する方法について説明する。

コード

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

解説

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

バージョン

データの生成

画像データは下記記事と同じコードにより生成した。

[matplotlib] 57. plt.imshow()で軸を画像から離して表示
matplotlibのplt.imshowで画像を表示する際に、軸を画像から離して表示する方法について説明する。

画像の表示

make_axes_locatableでカラーバーを表示する。.append_axes(“top”)で画像の上にカラーバーを表示できる。orientation=’horizontal’で水平なカラーバーとした。

class Set_Rectangleの作成

コンストラクタ

マウスイベントへの接続

button_press_event はクリックしたときに発生するイベントで、button_release_eventはクリックを離したときに発生するイベントで、motion_notify_eventはマウスを動かしたときに発生するイベントとなる。

クリック時の動作

self.press = x0, y0, event.xdata, event.ydataでデータを取得し、self.rect.set_xyで四角の位置をクリックした点とし、self.posi.appendでリストにデータを追加しておく。

ドラッグ時の動作

if self.press is None: returnでドラッグ時のみ有効になるようにしている。
クリックした点とドラッグした点のデータの差をとって、四角のwidthとheightをセットする。
self.rect.figure.canvas.draw()することで図の再描写を行う。

リリース時の動作

マウスリリース時の位置をself.posi.appendでリストに追加する。self.press = Noneでself.pressをリセットする。

マウスイベントで四角を表示

左下の座標が(0, 0)で幅0、高さ0のRectangleを作成し、ax.add_patch(rects)で図中に入れておく。
dr = Set_Rectangle(rects)とdr.connect()でマウスイベントが実行可能となる。

参考

Event handling and picking — Matplotlib 3.2.2 documentation
matplotlib.patches.Rectangle — Matplotlib 3.1.2 documentation

コメント