はじめに
この記事では、matplotlibでlegend(凡例)のラインをクリックすることで、対応するプロットの表示/非表示を切り替える方法について解説します。この機能を実装することで、データの可視化をよりインタラクティブにすることができます。
コード&解説
モジュールのインポート
バージョン
データの読み込み
この例ではFitbitで計測した心拍数データを使用します。Fitbit APIによるデータの取得方法については、下記記事で詳しく解説しています。
データは時間と1分間あたりの心拍数という形式になっています。1日ごとのデータを3日分読み込みます。

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()を実行して図を更新します。
クリックイベントの有効化
凡例のラインをクリックすることで強調したいデータを選ぶことができるため、複雑で分かりにくい図を見やすく整理することができます。

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