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

ipywidgets

はじめに

matplotlibのマウスリリースイベントを使って、クリックして離した場所に連続的な線分を描写する方法について説明する。

コード

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

解説

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

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

別ウインドウで図を表示するには%matplotlibとする。

バージョン

Outputの設定

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

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

コンストラクタ

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

__call__メソッド

クリックしたときに上記関数が呼び出される。
まずprintでoutputに座標の情報が表示される。if event.inaxes!=self.line.axes: returnは図の枠の外をクリックしたときにはなにもしないことを意味する。
appendで座標データをリストに入れて、set_dataでline2dオブジェクトにデータをセットし、drawで図を再描写している。

図の表示

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

jupyter notebookの場合

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

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

参考

Event handling and picking — Matplotlib 3.2.2 documentation

コメント