Matplotlib のスナップ機能付きスライダー

Beginner

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

はじめに

この実験では、Matplotlib を使って離散値を持つスライダーを作成する方法を学びます。また、スライダーの値を許可された値のセットに制限し、スライダーの値をそれらの許可された値にスナップさせる方法を学びます。

VM のヒント

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

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

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

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

このステップでは、この実験に必要なライブラリをインポートします。Matplotlib を使ってスライダーを作成し、NumPy を使って描画するデータを生成します。

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.widgets import Button, Slider

データを生成する

このステップでは、描画するデータを生成します。周波数 3Hz、振幅 5 の正弦波を作成します。

t = np.arange(0.0, 1.0, 0.001)
a0 = 5
f0 = 3
s = a0 * np.sin(2 * np.pi * f0 * t)

グラフと軸を作成する

このステップでは、グラフ用のグラフと軸を作成します。また、スライダー用のスペースを確保するために軸の位置を調整します。

fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.25)
l, = ax.plot(t, s, lw=2)

ax_freq = fig.add_axes([0.25, 0.1, 0.65, 0.03])
ax_amp = fig.add_axes([0.25, 0.15, 0.65, 0.03])

振幅スライダーの許可値を定義する

このステップでは、振幅スライダーの許可値を定義します。振幅スライダーはこれらの値を使って最も近い許可値にスナップします。

## define the values to use for snapping
allowed_amplitudes = np.concatenate([np.linspace(.1, 5, 100), [6, 7, 8, 9]])

スライダーを作成する

このステップでは、スライダーを作成します。振幅用のスライダーと周波数用のスライダーを 1 つずつ作成します。

samp = Slider(
    ax_amp, "Amp", 0.1, 9.0,
    valinit=a0, valstep=allowed_amplitudes,
    color="green"
)

sfreq = Slider(
    ax_freq, "Freq", 0, 10*np.pi,
    valinit=2*np.pi, valstep=np.pi,
    initcolor='none'  ## Remove the line marking the valinit position.
)

更新関数を作成する

このステップでは、スライダー用の更新関数を作成します。この関数は、スライダーの値が変更されたときにグラフを更新します。

def update(val):
    amp = samp.val
    freq = sfreq.val
    l.set_ydata(amp*np.sin(2*np.pi*freq*t))
    fig.canvas.draw_idle()

スライダーを更新関数に接続する

このステップでは、スライダーを更新関数に接続します。これにより、スライダーの値が変更されるたびにグラフが更新されるようになります。

sfreq.on_changed(update)
samp.on_changed(update)

リセットボタンを作成する

このステップでは、スライダー用のリセットボタンを作成します。クリックすると、リセットボタンはスライダーの値を初期値にリセットします。

ax_reset = fig.add_axes([0.8, 0.025, 0.1, 0.04])
button = Button(ax_reset, 'Reset', hovercolor='0.975')

def reset(event):
    sfreq.reset()
    samp.reset()
button.on_clicked(reset)

グラフを表示する

このステップでは、グラフを表示します。

plt.show()

まとめ

この実験では、Matplotlib を使って離散値を持つスライダーを作成する方法を学びました。また、スライダーの値を許可された値のセットに制限し、スライダーの値をそれらの許可された値にスナップさせる方法を学びました。また、スライダー用のリセットボタンを作成する方法も学びました。