はじめに
matplotlibのmotion_notify_eventを使って、マウスカーソルのxの位置に最も近いデータに十字カーソルを合わせる方法について説明する。
コード
解説
モジュールのインポートなど
%matplotlibでjupyter lab, notebook内ではなく、別ウインドウで表示する。
Qt5Aggのbackendで表示する。
バージョン
class SnaptoCursorの作成
コンストラクタ
self.lx = ax.axhline(color=’g’)で水平な線を表示し、self.ly = ax.axvline(color=’g’)で垂直な線を表示させる。
ax, x,yをそれぞれself.ax, self.x, self.yとする。
mouse_moveの設定
if not event.inaxes: returnでax内にカーソルがない場合はなにもしないようにする。
event.xdata, event.ydataでカーソルの現在位置を取得する。
np.argmin(np.abs(self.x-x))でカーソルの位置にxについて、最も近いデータのインデックスを求める。
indxの位置のデータをそれぞれx,y とし、self.lx.set_ydata(y)で水平線のデータをyの値でセットし、self.ly.set_xdata(x)で垂直線のデータをxの値でセットする。
self.ax.set_titleでx,yの値をタイトルに表示し、self.ax.figure.canvas.draw()で図を更新する。
図の表示
fig.canvas.mpl_connectで(‘motion_notify_event’)を実行し、snap_cursorのmouse_move内のコードをカーソルを動かすたびに実行させる。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)参考
Cursor Demo — Matplotlib 3.1.3 documentation
[NumPy] 6. データの最大, 最小, 0に最も近い値のindex
np.abs, np.argminを利用して、0に最も近い要素のindexを求める
コメント