소개
이 랩에서는 Matplotlib 의 RectangleSelector 및 EllipseSelector 위젯을 사용하여 초기 클릭 위치에서 현재 마우스 위치까지 사각형 또는 타원을 그리는 방법을 배우겠습니다.
VM 팁
VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접속하십시오.
때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수도 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.
학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.
필요한 라이브러리 임포트
먼저 필요한 라이브러리를 임포트하겠습니다: Matplotlib, Numpy, 그리고 RectangleSelector 및 EllipseSelector 위젯입니다.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import EllipseSelector, RectangleSelector
선택 콜백 함수 정의
선택 콜백 함수는 사용자가 사각형 또는 타원을 선택할 때마다 호출됩니다. 이 함수는 클릭 및 릴리스 이벤트를 인수로 받아서 사각형 또는 타원의 좌표를 출력합니다.
def select_callback(eclick, erelease):
"""
Callback for line selection.
*eclick* and *erelease* are the press and release events.
"""
x1, y1 = eclick.xdata, eclick.ydata
x2, y2 = erelease.xdata, erelease.ydata
print(f"({x1:3.2f}, {y1:3.2f}) --> ({x2:3.2f}, {y2:3.2f})")
print(f"The buttons you used were: {eclick.button} {erelease.button}")
토글 선택기 함수 정의
토글 선택기 함수는 사용자가 't' 키를 누를 때마다 호출됩니다. 이 함수는 RectangleSelector 및 EllipseSelector 위젯의 활성 상태를 토글합니다.
def toggle_selector(event):
print('Key pressed.')
if event.key == 't':
for selector in selectors:
name = type(selector).__name__
if selector.active:
print(f'{name} deactivated.')
selector.set_active(False)
else:
print(f'{name} activated.')
selector.set_active(True)
Figure 및 서브플롯 생성
RectangleSelector 와 EllipseSelector 를 위한 두 개의 서브플롯이 있는 figure 를 생성합니다.
fig = plt.figure(layout='constrained')
axs = fig.subplots(2)
서브플롯에 무언가 플롯하기
사용자가 RectangleSelector 및 EllipseSelector 의 효과를 볼 수 있도록 서브플롯에 무언가를 플롯합니다.
N = 100000 ## If N is large one can see improvement by using blitting.
x = np.linspace(0, 10, N)
for ax in axs:
ax.plot(x, np.sin(2*np.pi*x)) ## plot something
RectangleSelector 및 EllipseSelector 위젯 생성
RectangleSelector 및 EllipseSelector 위젯을 생성하고 이를 서브플롯에 추가합니다.
selectors = []
for ax, selector_class in zip(axs, [RectangleSelector, EllipseSelector]):
ax.set_title(f"Click and drag to draw a {selector_class.__name__}.")
selectors.append(selector_class(
ax, select_callback,
useblit=True,
button=[1, 3], ## disable middle button
minspanx=5, minspany=5,
spancoords='pixels',
interactive=True))
fig.canvas.mpl_connect('key_press_event', toggle_selector)
axs[0].set_title("Press 't' to toggle the selectors on and off.\n"
+ axs[0].get_title())
플롯 표시
마지막으로 사용자에게 플롯을 표시합니다.
plt.show()
요약
이 랩에서는 Matplotlib 에서 RectangleSelector 및 EllipseSelector 위젯을 사용하여 초기 클릭 위치에서 현재 마우스 위치까지 사각형 또는 타원을 그리는 방법을 배웠습니다. 또한 서브플롯이 있는 그림을 만들고, 서브플롯에 무언가를 플롯하고, 키 누름 이벤트를 사용하여 위젯의 활성 상태를 토글하는 방법도 배웠습니다.