소개
이 랩에서는 pyplot을 사용하여 figure 창을 관리하는 방법을 배우지만, 기본 GTK 위젯에 접근하여 GUI 를 수정하는 방법을 배웁니다. 두 개의 플롯이 있는 figure 를 생성하고 툴바에 버튼을 추가하고 캔버스에 레이블을 추가합니다. 또한 플롯 위로 커서가 이동할 때 커서의 좌표를 표시하는 기능을 추가합니다.
VM 팁
VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접근하십시오.
때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한 사항으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.
학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.
필요한 라이브러리 임포트
import matplotlib
matplotlib.use('GTK4Agg')
import gi
import matplotlib.pyplot as plt
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
matplotlib, gi, pyplot, 그리고 Gtk를 포함한 필요한 라이브러리를 임포트합니다. matplotlib 의 백엔드를 GTK4 를 사용하도록 설정합니다.
figure 및 플롯 생성
fig, ax = plt.subplots()
ax.plot([1, 2, 3], 'ro-', label='easy as 1 2 3')
ax.plot([1, 4, 9], 'gs--', label='easy as 1 2 3 squared')
ax.legend()
두 개의 서브플롯이 있는 figure 를 생성하고, 두 세트의 데이터를 플롯합니다. 또한 플롯에 범례 (legend) 를 추가합니다.
툴바 (toolbar) 및 vbox 에 접근
manager = fig.canvas.manager
toolbar = manager.toolbar
vbox = manager.vbox
figure canvas manager 의 toolbar 및 vbox 속성에 접근합니다.
툴바에 버튼 추가
button = Gtk.Button(label='Click me')
button.connect('clicked', lambda button: print('hi mom'))
button.set_tooltip_text('Click me for fun and profit')
toolbar.append(button)
레이블 (label) 과 툴팁 (tooltip) 이 있는 버튼을 생성하고, 콘솔에 메시지를 출력하는 함수에 연결합니다. 버튼을 툴바에 추가합니다.
캔버스에 레이블 추가
label = Gtk.Label()
label.set_markup('Drag mouse over axes for position')
vbox.insert_child_after(label, fig.canvas)
레이블을 생성하고 텍스트를 설정합니다. figure canvas 다음에 vbox 에 레이블을 추가합니다.
커서 좌표로 레이블 업데이트
def update(event):
if event.xdata is None:
label.set_markup('Drag mouse over axes for position')
else:
label.set_markup(
f'<span color="#ef0000">x,y=({event.xdata}, {event.ydata})</span>')
fig.canvas.mpl_connect('motion_notify_event', update)
플롯 위에서 커서가 움직일 때 커서의 x 및 y 좌표로 레이블을 업데이트하는 함수를 생성합니다. 함수를 캔버스의 motion_notify_event에 연결합니다.
그림 표시
plt.show()
추가된 버튼과 레이블이 있는 그림을 표시합니다.
요약
이 랩에서는 pyplot을 사용하여 그림 창을 관리하는 방법을 배웠지만, 기본 GTK 위젯에 접근하여 GUI 를 수정했습니다. 두 개의 플롯이 있는 그림을 생성하고, 툴바에 버튼을 추가하고, 캔버스에 레이블을 추가했습니다. 또한 플롯 위에서 커서가 움직일 때 커서의 좌표를 표시하는 기능을 추가했습니다. 이 랩은 GTK4 를 사용하여 matplotlib 그림의 GUI 를 사용자 정의하는 방법에 대한 기본적인 이해를 제공합니다.