Matplotlib 凡例の切り替えチュートリアル

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、Python の Matplotlib を使って凡例でのピッキングを有効にし、元の線をオンとオフに切り替える方法を学びます。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証は自動化できません。

学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

必要なライブラリをインポートする

まず、必要なライブラリである NumPy と Matplotlib をインポートする必要があります。

import matplotlib.pyplot as plt
import numpy as np

データを準備する

NumPy を使って、異なる周波数の 2 つのサイン波を生成します。

t = np.linspace(0, 1)
y1 = 2 * np.sin(2*np.pi*t)
y2 = 4 * np.sin(2*np.pi*2*t)

グラフと軸を作成する

Matplotlib を使ってグラフと軸を作成し、グラフのタイトルを設定します。

fig, ax = plt.subplots()
ax.set_title('Click on legend line to toggle line on/off')

線と凡例を作成する

Matplotlib を使って 2 つの線と凡例を作成します。

line1, = ax.plot(t, y1, lw=2, label='1 Hz')
line2, = ax.plot(t, y2, lw=2, label='2 Hz')
leg = ax.legend(fancybox=True, shadow=True)

凡例の線を元の線にマッピングする

辞書を使って凡例の線を元の線にマッピングします。

lines = [line1, line2]
lined = {}  ## 凡例の線を元の線にマッピングします。
for legline, origline in zip(leg.get_lines(), lines):
    legline.set_picker(True)  ## 凡例の線でのピッキングを有効にします。
    lined[legline] = origline

ピックイベント関数を定義する

凡例のプロキシ線に対応する元の線の可視性を切り替えるピックイベント関数を定義します。

def on_pick(event):
    ## ピックイベントで、凡例のプロキシ線に対応する元の線を見つけ、その可視性を切り替えます。
    legline = event.artist
    origline = lined[legline]
    visible = not origline.get_visible()
    origline.set_visible(visible)
    ## 凡例の線の透明度を変更して、どの線が切り替えられたかを確認できるようにします。
    legline.set_alpha(1.0 if visible else 0.2)
    fig.canvas.draw()

ピックイベント関数をキャンバスに接続する

ピックイベント関数をキャンバスに接続します。

fig.canvas.mpl_connect('pick_event', on_pick)

グラフを表示する

Matplotlib を使ってグラフを表示します。

plt.show()

まとめ

この実験では、Python の Matplotlib を使って凡例でのピッキングを有効にし、元の線をオンとオフに切り替える方法を学びました。グラフと軸を作成し、データを用意し、線と凡例を作成し、凡例の線を元の線にマッピングし、ピックイベント関数を定義し、ピックイベント関数をキャンバスに接続し、グラフを表示しました。