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

jupyter notebook, lab

はじめに

この記事では、matplotlibのイベント処理機能を使用して、マウスオーバーすると答えが表示される九九表を作成する方法を解説しています。特にaxes_enter_eventとaxes_leave_eventを活用して、マウスカーソルが要素上に乗ったときの動的な表示変更を実装します。

コード

解説

モジュールのインポート

Jupyter Labでインタラクティブなマウスイベントを利用するには、コードの冒頭で「%matplotlib widget」と記述します。この設定方法の詳細については、下記の記事で説明しています。

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

バージョン

データの生成

九九表のデータは、ブロードキャストを使って配列データを作成し、flattenメソッドで一次元配列に変換することで生成しました。

マウスイベントの設定

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

[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()で一次元配列に変換します。

[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))]によりx軸の目盛りを非表示にし、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でマウスイベントを有効にすると九九表が表示されます。

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

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

まとめ

matplotlibのイベント処理を活用することで、単なる静的な図表ではなく、ユーザーとインタラクションできる教育ツールとしての九九表を実装できました。axes_enter_eventとaxes_leave_eventを利用することで、マウスの動きに応じた表示の変更が可能となり、学習支援ツールとしての価値を高めることができます。このテクニックは九九表以外の様々なインタラクティブな可視化にも応用できるでしょう。

参考

[matplotlib] 67. マウスのenter & leaveイベントで図中のfigureの色とaxesの色を変化させる
matplotlibのマウスイベントを使用して、マウスカーソルがfigureやaxesに入ったり出たりした時に背景色を動的に変化させる方法を解説。インタラクティブな可視化を実現するための基本テクニックを紹介します。
[matplotlib] 12. 目盛り
matplotlibのグラフにおける目盛りの設定方法について説明する。
https://matplotlib.org/users/event_handling.html

コメント