Matplotlib を使ってサイン波のスライダーを作成する

MatplotlibMatplotlibBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このチュートリアルでは、スライダーを作成し、それを使ってサイン波の周波数と振幅を制御する方法を学びます。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

サイン波関数の定義

次に、サイン波を生成する関数を定義します。この関数は 2 つのパラメータ、振幅と周波数を受け取り、与えられた時刻におけるサイン波を返します。

def f(t, amplitude, frequency):
    return amplitude * np.sin(2 * np.pi * frequency * t)

初期グラフの作成

次に、サイン波の初期グラフを作成します。振幅と周波数の初期パラメータを定義し、それらのパラメータを使ってサイン波をプロットします。

t = np.linspace(0, 1, 1000)
init_amplitude = 5
init_frequency = 3

fig, ax = plt.subplots()
line, = ax.plot(t, f(t, init_amplitude, init_frequency), lw=2)
ax.set_xlabel('Time [s]')

スライダーの作成

次に、サイン波の周波数と振幅を調整できるようにするスライダーを作成します。周波数を制御する水平方向のスライダーと、振幅を制御する垂直方向のスライダーを作成します。

fig.subplots_adjust(left=0.25, bottom=0.25)
axfreq = fig.add_axes([0.25, 0.1, 0.65, 0.03])
freq_slider = Slider(
    ax=axfreq,
    label='Frequency [Hz]',
    valmin=0.1,
    valmax=30,
    valinit=init_frequency,
)

axamp = fig.add_axes([0.1, 0.25, 0.0225, 0.63])
amp_slider = Slider(
    ax=axamp,
    label="Amplitude",
    valmin=0,
    valmax=10,
    valinit=init_amplitude,
    orientation="vertical"
)

更新関数の作成

次に、スライダーを調整するたびにサイン波を更新する関数を作成します。この関数は、振幅と周波数のスライダーの値を受け取り、それに応じてサイン波を更新します。

def update(val):
    line.set_ydata(f(t, amp_slider.val, freq_slider.val))
    fig.canvas.draw_idle()

スライダーに更新関数を登録する

次に、更新関数を各スライダーに登録して、スライダーを調整するたびにその関数が呼び出されるようにします。

freq_slider.on_changed(update)
amp_slider.on_changed(update)

リセットボタンの作成

次に、スライダーを初期値にリセットするリセットボタンを作成します。

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

def reset(event):
    freq_slider.reset()
    amp_slider.reset()
button.on_clicked(reset)

グラフを表示する

最後に、スライダーとリセットボタン付きのグラフを表示します。

plt.show()

まとめ

このチュートリアルでは、スライダーを作成して、それを使ってサイン波の周波数と振幅を制御する方法を学びました。Matplotlib ライブラリを使って、サイン波とスライダーのグラフを作成しました。周波数を制御するための水平スライダーと、振幅を制御するための垂直スライダーを作成しました。また、スライダーを初期値にリセットするリセットボタンも作成しました。