[matplotlib] 103. legendのクリックイベントでプロットの表示/非表示きりかえ

matplotlib

はじめに

この記事では、matplotlibでlegend(凡例)のラインをクリックすることで、対応するプロットの表示/非表示を切り替える方法について解説します。この機能を実装することで、データの可視化をよりインタラクティブにすることができます。

コード&解説

モジュールのインポート

バージョン

データの読み込み

この例ではFitbitで計測した心拍数データを使用します。Fitbit APIによるデータの取得方法については、下記記事で詳しく解説しています。

データは時間と1分間あたりの心拍数という形式になっています。1日ごとのデータを3日分読み込みます。

[fitbit] 2. PythonでFitbit APIを使ってデータ取得 その2 fitbit-pythonによる睡眠データの取得とmatplotlibによる表示
fitbitとは、心拍数、歩数や睡眠をトラッキングするために腕に着用するタイプのスマートウォッチです。日々の健康状態を把握するのにとても役立っています。ここでは、アプリの登録からtokenの取得までを解説したその1の続きとして、Fitbit APIを使って睡眠データを取得してmatplotlibで表示するところまで解説します。

pd.to_datetime()によるデータ変換

pd.to_datetime()により、datetime形式に変換したデータを入手しておきます。

心拍数の経時変化をプロット

formatter = mdates.DateFormatter("%H:%M")を使用することで、x軸を時間形式(時:分)で表示しています。しかし、このままでは複数のデータが重なり合い、図が複雑で理解しにくくなってしまいます。

凡例のラインをクリックすることでデータ選択が可能な図

凡例とplotを対応させる

凡例に表示されている線と図に表示されている線を対応づけます。この実装では、set_pickerを使って凡例の線のピッキングを有効にし、set_pickradiusでクリックの有効範囲を広げておきます。

クリックイベントの設定

クリックした凡例に対応する図中のプロットの透明度を取得します。透明度が0.3以外のときは透明度を0.3に設定し、透明度が0.3のときは透明度を1に戻します。

fig.canvas.draw()を実行して図を更新します。

クリックイベントの有効化

凡例のラインをクリックすることで強調したいデータを選ぶことができるため、複雑で分かりにくい図を見やすく整理することができます。

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

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

まとめ

matplotlibのlegendにクリックイベントを追加することで、ユーザーがプロットの表示/非表示を対話的に切り替えられるようになります。この機能は複数のデータセットを含むグラフを扱う際に特に有用で、データ分析や発表の場面でグラフの見やすさを大幅に向上させます。

参考

Legend picking — Matplotlib 3.10.6 documentation

コメント