소개
이 랩에서는 Matplotlib 의 Polygon Selector 도구를 사용하여 컬렉션에서 인덱스를 선택하는 방법을 보여줍니다. Polygon Selector 도구를 사용하면 사용자가 그래프에서 다각형을 그려서 점을 선택할 수 있습니다. 선택된 점은 강조 표시되고 선택되지 않은 점은 흐리게 표시됩니다. 선택된 점의 인덱스는 배열에 저장되며, 이를 사용하여 추가 분석을 수행할 수 있습니다.
VM 팁
VM 시작이 완료되면 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 액세스하십시오.
때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한 사항으로 인해 작업의 유효성 검사는 자동화할 수 없습니다.
학습 중에 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.
라이브러리 임포트
이 단계에서는 이 랩에 필요한 라이브러리를 임포트합니다. 데이터 조작 및 시각화를 위해 numpy와 matplotlib를 사용합니다.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.path import Path
from matplotlib.widgets import PolygonSelector
데이터 생성
이 단계에서는 시각화할 데이터를 생성합니다. 그리드에 점의 산점도를 생성합니다.
fig, ax = plt.subplots()
grid_size = 5
grid_x = np.tile(np.arange(grid_size), grid_size)
grid_y = np.repeat(np.arange(grid_size), grid_size)
pts = ax.scatter(grid_x, grid_y)
선택기 클래스 정의
이 단계에서는 Polygon Selector 도구를 사용하여 산점도에서 점을 선택할 수 있도록 해주는 클래스를 정의합니다. 이 클래스는 선택된 점의 인덱스를 배열에 저장합니다.
class SelectFromCollection:
"""
`PolygonSelector` 를 사용하여 matplotlib 컬렉션에서 인덱스를 선택합니다.
선택된 인덱스는 `ind` 속성에 저장됩니다. 이 도구는 선택에 포함되지 않은 점을 흐리게 처리합니다 (즉, 알파 값을 줄입니다). 컬렉션의 알파 값이 1 미만인 경우, 이 도구는 알파 값을 영구적으로 변경합니다.
이 도구는 *원점* (즉, `offsets`) 을 기반으로 컬렉션 객체를 선택합니다.
매개변수
----------
ax : `~matplotlib.axes.Axes`
상호 작용할 축.
collection : `matplotlib.collections.Collection` 서브클래스
선택할 컬렉션.
alpha_other : 0 <= float <= 1
선택을 강조 표시하기 위해 이 도구는 선택된 모든 점의 알파 값을 1 로 설정하고 선택되지 않은 점의 알파 값을 *alpha_other*로 설정합니다.
"""
def __init__(self, ax, collection, alpha_other=0.3):
self.canvas = ax.figure.canvas
self.collection = collection
self.alpha_other = alpha_other
self.xys = collection.get_offsets()
self.Npts = len(self.xys)
## Ensure that we have separate colors for each object
self.fc = collection.get_facecolors()
if len(self.fc) == 0:
raise ValueError('Collection must have a facecolor')
elif len(self.fc) == 1:
self.fc = np.tile(self.fc, (self.Npts, 1))
self.poly = PolygonSelector(ax, self.onselect, draw_bounding_box=True)
self.ind = []
def onselect(self, verts):
path = Path(verts)
self.ind = np.nonzero(path.contains_points(self.xys))[0]
self.fc[:, -1] = self.alpha_other
self.fc[self.ind, -1] = 1
self.collection.set_facecolors(self.fc)
self.canvas.draw_idle()
def disconnect(self):
self.poly.disconnect_events()
self.fc[:, -1] = 1
self.collection.set_facecolors(self.fc)
self.canvas.draw_idle()
선택기 객체 생성
이 단계에서는 3 단계에서 정의한 Selector 클래스의 인스턴스를 생성합니다. 이를 통해 Polygon Selector 도구를 사용하여 산점도에서 점을 선택할 수 있습니다.
selector = SelectFromCollection(ax, pts)
점 선택
이 단계에서는 Polygon Selector 도구를 사용하여 산점도에서 점을 선택합니다. 점 주위에 다각형을 그려서 점을 선택할 수 있습니다. 선택된 점은 강조 표시되고 선택되지 않은 점은 흐리게 표시됩니다.
print("다각형 안에 점을 포함시켜 그림에서 점을 선택합니다.")
print("'esc' 키를 눌러 새 다각형을 시작합니다.")
print("모든 꼭지점을 이동하려면 'shift' 키를 누르고 시도하십시오.")
print("단일 꼭지점을 이동하려면 'ctrl' 키를 누르고 시도하십시오.")
plt.show()
선택기 객체 연결 해제
이 단계에서는 Polygon Selector 도구에서 사용하는 리소스를 해제하기 위해 Selector 객체의 연결을 해제합니다.
selector.disconnect()
선택된 점 출력
이 단계에서는 선택된 점의 좌표를 출력합니다.
print('\nSelected points:')
print(selector.xys[selector.ind])
요약
이 랩에서는 Matplotlib 에서 Polygon Selector 도구를 사용하여 산점도에서 인덱스를 선택하는 방법을 보여줍니다. Selector 클래스를 사용하면 사용자가 점 주위에 다각형을 그려 점을 선택할 수 있습니다. 선택된 점은 강조 표시되고 선택되지 않은 점은 흐리게 표시됩니다. 선택된 점의 인덱스는 배열에 저장되며, 이는 추가 분석에 사용할 수 있습니다.