Matplotlib 라쏘 데모

Beginner

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

소개

이 랩에서는 Matplotlib 라이브러리를 사용하여 사용자가 라쏘 도구를 사용하여 일련의 점을 선택할 수 있는 대화형 플롯을 만드는 방법을 배우게 됩니다. 또한 콜백 함수를 사용하여 선택한 점의 색상을 변경하는 방법도 배우게 됩니다.

VM 팁

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

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

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

라이브러리 임포트

먼저, 랩에 필요한 라이브러리를 임포트합니다. 플롯을 생성하기 위해 matplotlib를 사용하고, 임의의 데이터를 생성하기 위해 numpy를 사용합니다.

import matplotlib.pyplot as plt
import numpy as np

라쏘 매니저 클래스 생성

다음으로, 라쏘 기능을 처리할 LassoManager 클래스를 생성합니다. __init__ 메서드는 플롯과 컬렉션 객체를 초기화합니다. callback 메서드는 선택된 점의 색상을 변경하고, on_presson_release 메서드는 마우스 이벤트를 처리합니다.

class LassoManager:
    def __init__(self, ax, data):
        ## 점이 선택되었는지 여부에 대한 정보는
        ## 컬렉션의 배열에 저장됩니다 (0 = out, 1 = in).
        ## 그런 다음 파란색 (out) 과 빨간색 (in) 으로 색상이 매핑됩니다.
        self.collection = RegularPolyCollection(
            6, sizes=(100,), offset_transform=ax.transData,
            offsets=data, array=np.zeros(len(data)),
            clim=(0, 1), cmap=mcolors.ListedColormap(["tab:blue", "tab:red"]))
        ax.add_collection(self.collection)
        canvas = ax.figure.canvas
        canvas.mpl_connect('button_press_event', self.on_press)
        canvas.mpl_connect('button_release_event', self.on_release)

    def callback(self, verts):
        data = self.collection.get_offsets()
        self.collection.set_array(path.Path(verts).contains_points(data))
        canvas = self.collection.figure.canvas
        canvas.draw_idle()
        del self.lasso

    def on_press(self, event):
        canvas = self.collection.figure.canvas
        if event.inaxes is not self.collection.axes or canvas.widgetlock.locked():
            return
        self.lasso = Lasso(event.inaxes, (event.xdata, event.ydata), self.callback)
        canvas.widgetlock(self.lasso)  ## acquire a lock on the widget drawing

    def on_release(self, event):
        canvas = self.collection.figure.canvas
        if hasattr(self, 'lasso') and canvas.widgetlock.isowner(self.lasso):
            canvas.widgetlock.release(self.lasso)

플롯 생성

이제 LassoManager 클래스를 사용하여 대화형 플롯을 생성합니다. np.random.rand 함수는 플롯될 임의의 데이터 포인트를 생성합니다.

if __name__ == '__main__':
    np.random.seed(19680801)
    ax = plt.figure().add_subplot(
        xlim=(0, 1), ylim=(0, 1), title='Lasso points using left mouse button')
    manager = LassoManager(ax, np.random.rand(100, 2))
    plt.show()

요약

이 랩에서는 Matplotlib 을 사용하여 사용자가 라쏘 도구를 사용하여 일련의 점을 선택할 수 있는 대화형 플롯을 만드는 방법을 배웠습니다. 또한 선택된 점의 색상을 변경하기 위해 콜백 함수를 사용하는 방법도 배웠습니다. 이 기능은 대화형 데이터 선택이 필요한 다른 프로젝트로 확장될 수 있습니다.