[matplotlib] 91. マウスオーバーイベントで九九表(Multiplication tables)

jupyter notebook

はじめに

matplotlibのaxes_enter_event、axes_leave_eventを使ってaxesの背景色を変えて、マウスオーバーすると答えが出る九九表を作成する。

コード

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

解説

モジュールのインポート

jupyter labでインタラクティブなマウスイベントを利用するために、冒頭で%matplotlib widgetとする。

%matplotlib widgetを使えるようにする方法については下記記事で説明した。

[ipywidgets] 19. Jupyter labでipywidgetsを動かす
jupyter labでipywidgetsを使おうとして、冒頭に%matplotlib notebookと入れても動作しません。 ここでは、jupyter labでipywidgetsを使う方法について説明します。

バージョン

データの生成

九九表のデータについてはブロードキャストで配列データを作成して、flattenにより、1次元配列に形状変換することで作成した。

マウスイベントの設定

マウスイベントは下記記事と同様のものを用いた。

[matplotlib] 67. マウスのenter & leaveイベントで図中のfigureの色とaxesの色を変化させる
matplotlibのマウスイベントを使って、図中のfigureとaxesに出入りした際に色を変化させる方法について説明する。

enter_axes(event)はaxes内にマウスが入ったときの動作であり、event.inaxes.patch.set_facecolor(‘w’)で背景色を白にする。leave_axes(event)はaxesからマウスが出たときのイベントであり、event.inaxes.patch.set_facecolor(‘k’)により背景色を黒とする。

表の表示

axは(9,9)の形状をしているので、ax.ravel()で1次元化する。

[ax[i].set_facecolor(‘k’) for i in range(len(ax))]で全ての図の背景色を黒とする。
[ax[i].xaxis.set_major_locator(ticker.NullLocator()) for i in range(len(ax))]により、目盛りを非表示する。y軸も同様に処理する。
[ax[i].text(0.5, 0.5, str(kuku[i]), ha=’center’,va=’center’, transform=ax[i].transAxes) for i in range(len(ax))]によりそれぞれの図の中央に九九の値を表示する。黒背景に黒字として、同化して見えないようにする。

set_ylabelとset_titleにより、左と上にある数字を表示する。

マウスイベントの有効化

mpl_connectでマウスイベントを有効にすると九九表が表示される。

参考

[matplotlib] 67. マウスのenter & leaveイベントで図中のfigureの色とaxesの色を変化させる
matplotlibのマウスイベントを使って、図中のfigureとaxesに出入りした際に色を変化させる方法について説明する。
[matplotlibの使い方] 12. 目盛り
matplotlibのグラフにおける目盛りの設定方法について説明する。
Event handling and picking — Matplotlib 3.3.2 documentation

コメント