はじめに
この記事では、matplotlibのマウスイベント機能を使って、図中に配置した四角形をマウスでドラッグして自由に移動させる方法について解説します。Pythonでインタラクティブな可視化を実現するための実践的なテクニックを学べます。
コード

解説
モジュールのインポートなど
Jupyter Labでインタラクティブな操作を行うには、コードの冒頭に「%matplotlib widget」を記述します。Jupyter Notebookの場合は「%matplotlib notebook」を使用します。別ウィンドウで図を表示したい場合は「%matplotlib」を指定します。
バージョン
図の作成
グラデーションの背景表示関数
この関数は下記記事で用いたものを用いました。

図の表示
図は下記のようになります。図の中央に配置されたグレーの四角形(Rectangle)をマウスでドラッグして移動できるようにします。

Outputの設定
print()を表示するためのOutputをdisplay()で表示しておきます。
class DraggableRectangleの作成
コンストラクタ
マウスイベントへの接続
button_press_eventはマウスをクリックした時に発生し、button_release_eventはクリックを離した時に発生します。また、motion_notify_eventはマウスを動かした時に発生するイベントです。
クリック時の動作
self.rect.contains(event)でクリックした位置に四角形があるかどうかを判定します。四角形以外の場所をクリックしても何も起こりません。
self.press = x0, y0, event.xdata, event.ydataで四角形の座標とクリックした位置のデータを保持します。
ドラッグ時の動作
「self.press is None: return」の条件により、ドラッグ操作時のみ処理が有効になるようにしています。
クリックした位置とドラッグした位置のデータの差分を計算し、その移動量を四角形のxy座標に適用することで四角形を動かしています。
「self.rect.figure.canvas.draw()」を実行することで、図の再描画を行い変更を反映させています。
リリース時の動作
マウスリリース時にクリック時に取得したデータをリセットします。
ドラッグできる図の表示
下図のようにドラッグで四角を動かすことができます。

jupyter notebookの場合

イベントの切断
dr.disconnect()を使用してイベントを切断することで、四角形がドラッグに反応しなくなります。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)まとめ
matplotlibのマウスイベントを利用することで、図中の四角形をドラッグして自由に動かせるインタラクティブな可視化が実現できます。イベントハンドラーを適切に設定し、press、move、releaseの各イベントを処理することがポイントです。この技術を応用すれば、より直感的で操作性の高いデータビジュアライゼーションを作成することが可能になります。
参考

コメント