소개
이 랩에서는 Matplotlib 라이브러리를 사용하여 그림 창을 생성하고 수정하는 방법을 배웁니다. 또한 기본 GTK 위젯에 접근하여 GUI 를 사용자 정의하는 방법도 살펴봅니다.
VM 팁
VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접근하십시오.
때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.
학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 즉시 문제를 해결해 드리겠습니다.
라이브러리 임포트
먼저, 필요한 라이브러리를 임포트해야 합니다. Matplotlib, GTK3, 그리고 gi.repository 에서 Gtk 모듈을 사용할 것입니다.
import matplotlib
matplotlib.use('GTK3Agg') ## or 'GTK3Cairo'
import gi
import matplotlib.pyplot as plt
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
Figure 및 Axis 생성
다음으로, subplots() 메서드를 사용하여 figure 와 axis 를 생성합니다. 그런 다음 axis 에 두 개의 선을 그리고, 이를 구별하기 위해 범례 (legend) 를 추가합니다.
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()
툴바 (Toolbar) 및 VBox 접근
manager.toolbar 및 manager.vbox 메서드를 사용하여 figure canvas manager 의 툴바 (toolbar) 및 vbox 속성에 각각 접근합니다.
manager = fig.canvas.manager
toolbar = manager.toolbar
vbox = manager.vbox
툴바 (Toolbar) 에 버튼 추가
Gtk 모듈을 사용하여 툴바 (toolbar) 에 버튼을 추가합니다. 먼저, 레이블 (label) 이 있는 버튼을 생성하고, 클릭 시 메시지를 출력하는 함수에 연결합니다. 그런 다음, toolitem 을 생성하고, 툴팁 텍스트를 설정하고, 버튼을 추가하고, 툴바에 삽입합니다.
button = Gtk.Button(label='Click me')
button.show()
button.connect('clicked', lambda button: print('hi mom'))
toolitem = Gtk.ToolItem()
toolitem.show()
toolitem.set_tooltip_text('Click me for fun and profit')
toolitem.add(button)
pos = 8 ## where to insert this in the toolbar
toolbar.insert(toolitem, pos)
VBox 에 레이블 (Label) 추가
축 위로 마우스를 드래그할 때 마우스의 x, y 좌표를 표시하기 위해 vbox 에 레이블 (label) 을 추가합니다. 먼저, 텍스트가 있는 레이블을 생성하고 vbox 에 추가합니다.
label = Gtk.Label()
label.set_markup('Drag mouse over axes for position')
label.show()
vbox.pack_start(label, False, False, 0)
마우스 움직임에 따라 레이블 텍스트 업데이트
축 위로 마우스를 드래그할 때 마우스의 x, y 좌표를 표시하도록 레이블 텍스트를 업데이트합니다. 레이블 텍스트를 업데이트하는 함수를 생성하고, mpl_connect() 메서드를 사용하여 motion_notify_event에 연결합니다.
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)
플롯 표시
마지막으로, show() 메서드를 사용하여 플롯을 표시합니다.
plt.show()
요약
이 랩에서는 Matplotlib 을 사용하여 figure window 를 생성하고 수정하는 방법을 배웠습니다. 또한 기본 GTK 위젯에 접근하여 GUI 를 사용자 정의하는 방법도 살펴보았습니다. 툴바에 버튼을 추가하고, vbox 에 레이블을 추가했으며, 마우스 움직임에 따라 레이블 텍스트를 업데이트했습니다. 또한 축에 두 개의 선을 플롯하고, 이를 구별하기 위해 범례 (legend) 를 추가했습니다.