[matplotlib] 69. 散布図上でクリックした点に関連付けられたデータを下図に表示する

ipywidgets

はじめに

matplotlibのマウスイベントとピックイベントを使って、散布図中のクリックした点に関連付けられたデータを下図に表示する方法について説明する。

コード

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

解説

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

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

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

バージョン

データの作成

np.random.rand(30, 100)でランダムデータを作成して、平均値と標準偏差をそれぞれxs, ysとする。

上図の表示

mfcはマーカーの色で、mewはマーカーの線幅であり、mecはマーカーの線幅の色で、 msはマーカーの大きさとなる。
picker=5はクリックした点をクリックしたとみなす許容範囲の設定となる。

下図の表示

plotにデータをセットすることで図を表示するので、空のリストでプロットを作成しておく。
図中へテキストを挿入できるax1.textでtransform=ax1.transAxesとすることで下図のaxesの相対的な座標位置にテキストを入れることができる。最初にからのテキストを入れておいて、イベント中でset_textとすることでテキストを表示する。

onpickイベントの設定

まず、クリックした点をevent.artistで取得する。
次に、get_xdataとget_ydataでその点を含む一連のデータを得る。
次にevent.indでその点のインデックスを取得する。
そして、ax0.plot(xdata[ind], ydata[ind],”o”,ms=12)でクリックした点と同じ座標に新たな点をプロットする。

plot.set_data((np.arange(100),X[ind,:]))で下図に選択したデータを表示する。
texts.set_text()でテキストをセットして下図に表示する。

最後にfig.canvas.draw()で図を更新することでイベントの内容が図に反映される。

イベントの有効化

fig.canvas.mpl_connect(‘pick_event’, onpick)でイベントを有効にしてから、plt.show()で図を表示する。下図のようにクリックした点の色が変わり、その点のデータが下図に表示される。

jupyter notebookの場合

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

参考

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

コメント