소개
이 랩에서는 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
데이터 생성
이 단계에서는 플롯할 데이터를 생성합니다. 주파수가 3 Hz 이고 진폭이 5 인 사인파를 생성합니다.
t = np.arange(0.0, 1.0, 0.001)
a0 = 5
f0 = 3
s = a0 * np.sin(2 * np.pi * f0 * t)
Figure 및 Axes 생성
이 단계에서는 플롯을 위한 figure 와 axes 를 생성합니다. 또한 슬라이더를 위한 공간을 만들기 위해 axes 의 위치를 조정합니다.
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]])
슬라이더 생성
이 단계에서는 슬라이더를 생성합니다. 진폭에 대한 슬라이더 하나와 주파수에 대한 슬라이더 하나를 생성합니다.
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 를 사용하여 이산 값 (discrete values) 을 가진 슬라이더를 만드는 방법을 배웠습니다. 슬라이더 값을 허용된 값 집합으로 제한하고 슬라이더 값을 해당 허용된 값에 스냅하는 방법을 배웠습니다. 또한 슬라이더에 대한 리셋 버튼을 만드는 방법도 배웠습니다.