[matplotlib] 68. 散布図上でクリックした点の色を変える

ipywidgets

はじめに

matplotlibのマウスイベントとピックイベントを使って、散布図中のクリックした点の色を変化させる方法について説明する。

コード

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

解説

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

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

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

バージョン

散布図の表示

0〜10のランダムな値をx,yそれぞれにもつ点を緑のまるで表示する。
mewはマーカーの線幅であり、mecはマーカーの線幅の色で、 msはマーカーの大きさとなる。
picker=10はクリックした点をクリックしたとみなす許容範囲の設定となる。

Outputの設定

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

イベントの設定

@out.capture(clear_output=True)で常に新しい情報のみが表示されるようにする。
まず、クリックした点をevent.artistで取得する。
次に、get_xdataとget_ydataでその点を含む一連のデータを得る。
次にevent.indでその点のインデックスを取得する。
そして、ax.plot(xdata[ind], ydata[ind],”C6o”,ms=12)でクリックした点と同じ座標に新たなピンクの点をプロットする。
最後にfig.canvas.draw()で図を更新することでプロットが表示される。

イベントの有効化

fig.canvas.mpl_connect(‘pick_event’, onpick)でイベントを有効にしてから、plt.show()で図を表示する。下図のようにクリックした点のみがピンクとなる。

jupyter notebookの場合

別ウインドウで表示(GUI)

参考

Event handling and picking — Matplotlib 3.2.1 documentation
numpy.random.rand — NumPy v1.14 Manual

コメント