다각형 선택 도구를 사용하여 인덱스 선택

Beginner

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

소개

이 랩에서는 Matplotlib 의 Polygon Selector 도구를 사용하여 컬렉션에서 인덱스를 선택하는 방법을 보여줍니다. Polygon Selector 도구를 사용하면 사용자가 그래프에서 다각형을 그려서 점을 선택할 수 있습니다. 선택된 점은 강조 표시되고 선택되지 않은 점은 흐리게 표시됩니다. 선택된 점의 인덱스는 배열에 저장되며, 이를 사용하여 추가 분석을 수행할 수 있습니다.

VM 팁

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

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

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

라이브러리 임포트

이 단계에서는 이 랩에 필요한 라이브러리를 임포트합니다. 데이터 조작 및 시각화를 위해 numpymatplotlib를 사용합니다.

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 클래스를 사용하면 사용자가 점 주위에 다각형을 그려 점을 선택할 수 있습니다. 선택된 점은 강조 표시되고 선택되지 않은 점은 흐리게 표시됩니다. 선택된 점의 인덱스는 배열에 저장되며, 이는 추가 분석에 사용할 수 있습니다.