[matplotlib] 65. ‘button_release_event’で図に線分を描写

ipywidgets

はじめに

この記事では、matplotlibのマウスリリースイベント(‘button_release_event’)を使用して、ユーザーがクリックして離した位置に連続的な線分を描画する方法について解説します。マウスイベントを活用して対話的なグラフ作成を実現する手法を紹介します。

コード

解説

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

Jupyter Labでインタラクティブな操作をするには、冒頭で「%matplotlib widget」と記述します。Jupyter Notebookの場合は「%matplotlib notebook」となります。別ウィンドウで図を表示するには「%matplotlib」と記述します。

バージョン

Outputの設定

print()を表示するためのOutputをdisplay()で表示しておきます。

クリックで線を表示するクラスの設定

コンストラクタ

ここでは、lineはLine2Dオブジェクトです。xs、ysには、クリックした座標が格納されるリストとなります。line.figure.canvas.mpl_connect(‘button_release_event’, self)を使用することで、マウスのリリースイベントを有効化できます。

__call__メソッド

マウスをクリックすると上記の関数が呼び出されます。

まず、printによって座標情報がコンソール出力に表示されます。「if event.inaxes!=self.line.axes: return」は、図の枠外をクリックした場合は処理を中断するという意味です。

appendメソッドで座標データをリストに追加し、set_dataメソッドでLine2Dオブジェクトにそのデータをセットします。最後にdrawメソッドを呼び出して図を再描画しています。

図の表示

下図のようにクリックを離した点の間に点線が表示されます。

jupyter notebookの場合

図を別ウインドウで表示した場合

冒頭で%matplotlibと記述すると、初期設定のGUIで図が表示されます。この例ではQt5Aggで表示されました。

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

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

まとめ

matplotlibの’button_release_event’を活用することで、マウス操作による対話的な線分描画が可能になります。イベントハンドラを適切に設定し、座標データを管理することで、ユーザーの操作に応じたグラフィックスを動的に生成できます。この手法は科学的データの分析や視覚化ツールの開発において非常に有用です。

参考

https://matplotlib.org/users/event_handling.html#event-attributes

コメント