Matplotlib 를 사용하여 사인파 슬라이더 만들기

Beginner

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

소개

이 튜토리얼에서는 슬라이더를 생성하고 이를 사용하여 사인파의 주파수와 진폭을 제어하는 방법을 배웁니다. Matplotlib 라이브러리를 사용하여 사인파 그래프와 슬라이더를 생성합니다. 슬라이더를 통해 사인파의 주파수와 진폭을 조절할 수 있습니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접근하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.

라이브러리 임포트

첫 번째 단계는 필요한 라이브러리를 임포트하는 것입니다. Matplotlib 과 NumPy 를 사용할 것입니다.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import Button, Slider

사인파 함수 정의

다음으로, 사인파를 생성할 함수를 정의합니다. 이 함수는 진폭과 주파수, 두 개의 매개변수를 입력으로 받아 주어진 시간에 사인파를 반환합니다.

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 라이브러리를 사용하여 사인파와 슬라이더의 그래프를 생성했습니다. 주파수를 제어하기 위한 수평 슬라이더와 진폭을 제어하기 위한 수직 슬라이더를 만들었습니다. 또한 슬라이더를 초기 값으로 리셋하는 리셋 버튼도 만들었습니다.