はじめに
matplotlibのbutton_press_event、button_release_event、motion_notify_eventで、画像の任意の位置に四角をインタラクティブに表示する方法について説明する。
コード
解説
モジュールのインポートなど
バージョン
データの生成
画像データは下記記事と同じコードにより生成した。
画像の表示
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()でマウスイベントが実行可能となる。
コメント