Matplotlib 를 이용한 간단한 GUI (사인파) 생성

Beginner

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

소개

이 랩에서는 Matplotlib 의 Button 위젯을 사용하여 간단한 GUI 를 만드는 방법을 배웁니다. 이 GUI 를 통해 NextPrevious 버튼을 사용하여 주파수를 변경하여 사인파를 수정할 수 있습니다.

VM 팁

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

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

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

필요한 라이브러리 임포트

먼저, matplotlib.pyplot, numpy, 그리고 matplotlib.widgets에서 Button을 포함한 필요한 라이브러리를 임포트합니다.

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

초기 플롯 설정

다음으로, 초기 플롯을 설정합니다. numpyarange 함수를 사용하여 2 Hz 의 주파수를 가진 사인파를 생성하고, matplotlib.pyplotplot 함수를 사용하여 이를 플롯합니다.

freqs = np.arange(2, 20, 3)
fig, ax = plt.subplots()
t = np.arange(0.0, 1.0, 0.001)
s = np.sin(2*np.pi*freqs[0]*t)
l, = ax.plot(t, s, lw=2)

버튼 콜백 함수 생성

이제 NextPrevious 버튼에 대한 두 개의 콜백 함수를 생성합니다. 이 함수들은 다른 주파수를 가진 새로운 사인파로 플롯을 업데이트합니다.

class Index:
    ind = 0

    def next(self, event):
        self.ind += 1
        i = self.ind % len(freqs)
        ydata = np.sin(2*np.pi*freqs[i]*t)
        l.set_ydata(ydata)
        plt.draw()

    def prev(self, event):
        self.ind -= 1
        i = self.ind % len(freqs)
        ydata = np.sin(2*np.pi*freqs[i]*t)
        l.set_ydata(ydata)
        plt.draw()

callback = Index()

NextPrevious 버튼 생성

이제 matplotlib.pyplotadd_axes 함수를 사용하여 NextPrevious 버튼을 생성하고, 앞서 생성한 콜백 함수들을 on_clicked를 사용하여 할당합니다.

axprev = fig.add_axes([0.7, 0.05, 0.1, 0.075])
axnext = fig.add_axes([0.81, 0.05, 0.1, 0.075])
bnext = Button(axnext, 'Next')
bnext.on_clicked(callback.next)
bprev = Button(axprev, 'Previous')
bprev.on_clicked(callback.prev)

플롯 표시

마지막으로, matplotlib.pyplotshow 함수를 사용하여 플롯을 표시합니다.

plt.show()

요약

이 랩에서는 Matplotlib 의 Button 위젯을 사용하여 간단한 GUI 를 만드는 방법을 배웠습니다. NextPrevious 버튼을 사용하여 주파수를 변경함으로써 사인파를 수정하는 방법을 익혔습니다.