はじめに
この実験では、Python の Matplotlib におけるチェックボタンの使い方を示します。チェックボタンを使うことで、ユーザーはチェックボックスと同様に、可視要素をオンまたはオフに切り替えることができます。3 つの異なるサイン波を持つプロットを作成し、チェックボタンを使ってどの波を表示するかを選択できるようにするために、CheckButtons関数を使用します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に直面した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリのインポート
必要なライブラリをインポートして始めましょう。データの生成にはnumpyが必要で、プロットの作成にはmatplotlibが必要です。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import CheckButtons
データの生成
次に、プロット用のデータを生成します。numpyを使って、異なる周波数の 3 つのサイン波を作成します。
t = np.arange(0.0, 2.0, 0.01)
s0 = np.sin(2*np.pi*t)
s1 = np.sin(4*np.pi*t)
s2 = np.sin(6*np.pi*t)
プロットの作成
次に、matplotlibを使ってプロットを作成します。3 つのサイン波を同じグラフにプロットし、最初の波の可視性をFalseに設定します。なぜなら、最初は非表示にしておきたいからです。
fig, ax = plt.subplots()
l0, = ax.plot(t, s0, visible=False, lw=2, color='black', label='1 Hz')
l1, = ax.plot(t, s1, lw=2, color='red', label='2 Hz')
l2, = ax.plot(t, s2, lw=2, color='green', label='3 Hz')
fig.subplots_adjust(left=0.2)
チェックボタンの追加
次に、CheckButtons関数を使ってチェックボタンをプロットに追加します。プロットされた線をラベルとして渡し、各線の初期の可視性を設定します。また、チェックボタンのプロパティを調整して、プロットされた線の色に合わせます。
lines_by_label = {l.get_label(): l for l in [l0, l1, l2]}
line_colors = [l.get_color() for l in lines_by_label.values()]
rax = fig.add_axes([0.05, 0.4, 0.1, 0.15])
check = CheckButtons(
ax=rax,
labels=lines_by_label.keys(),
actives=[l.get_visible() for l in lines_by_label.values()],
label_props={'color': line_colors},
frame_props={'edgecolor': line_colors},
check_props={'facecolor': line_colors},
)
コールバック関数の定義
チェックボタン用のコールバック関数を定義する必要があります。この関数は、チェックボタンがクリックされるたびに呼び出されます。この関数を使って、プロット上の対応する線の可視性を切り替えます。
def callback(label):
ln = lines_by_label[label]
ln.set_visible(not ln.get_visible())
ln.figure.canvas.draw_idle()
check.on_clicked(callback)
プロットの表示
最後に、show()関数を使ってプロットを表示します。
plt.show()
まとめ
この実験では、Python の Matplotlib でチェックボタンを使う方法を学びました。3 つの異なるサイン波を持つプロットを作成し、チェックボタンを使ってどの波を表示するかを選べるようにしました。CheckButtons関数を使ってボタンを作成し、コールバック関数を定義して、プロット上の対応する線の可視性を切り替えました。