대화형 Matplotlib 시각화 기술

Beginner

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

소개

이 랩에서는 Matplotlib 에서 선택 (picking) 의 개념을 소개합니다. 아티스트를 선택하는 능력은 사용자 작업에 반응하는 대화형 시각화를 구축하는 데 사용할 수 있는 강력한 도구입니다. 간단한 선택, 사용자 정의 히트 테스트 함수를 사용한 선택, 산점도에서 선택, 이미지 선택을 다룰 것입니다.

VM 팁

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

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

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

간단한 선택, 선, 사각형 및 텍스트

아티스트의 "picker" 속성을 설정하여 간단한 선택을 활성화하는 것으로 시작합니다. 이렇게 하면 마우스 이벤트가 아티스트 위에 있는 경우 아티스트가 선택 이벤트를 발생시킬 수 있습니다. 선, 사각형 및 텍스트를 포함하는 간단한 플롯을 만들고 각 아티스트에서 선택을 활성화합니다.

fig, (ax1, ax2) = plt.subplots(2, 1)
ax1.set_title('click on points, rectangles or text', picker=True)
ax1.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red'))
line, = ax1.plot(rand(100), 'o', picker=True, pickradius=5)

## Pick the rectangle.
ax2.bar(range(10), rand(10), picker=True)
for label in ax2.get_xticklabels():  ## Make the xtick labels pickable.
    label.set_picker(True)

사용자 정의 히트 테스트 함수 생성

이 단계에서는 picker 를 호출 가능한 함수로 설정하여 사용자 정의 선택기를 정의합니다. 이 함수는 아티스트가 마우스 이벤트에 의해 히트되었는지 여부를 결정합니다. 마우스 이벤트가 아티스트 위에 있으면 hit=True 를 반환하고 props 는 .PickEvent 속성에 추가하려는 속성의 딕셔너리입니다.

def line_picker(line, mouseevent):
    """
    Find the points within a certain distance from the mouseclick in
    data coords and attach some extra attributes, pickx and picky
    which are the data points that were picked.
    """
    if mouseevent.xdata is None:
        return False, dict()
    xdata = line.get_xdata()
    ydata = line.get_ydata()
    maxd = 0.05
    d = np.sqrt(
        (xdata - mouseevent.xdata)**2 + (ydata - mouseevent.ydata)**2)

    ind, = np.nonzero(d <= maxd)
    if len(ind):
        pickx = xdata[ind]
        picky = ydata[ind]
        props = dict(ind=ind, pickx=pickx, picky=picky)
        return True, props
    else:
        return False, dict()


def onpick2(event):
    print('onpick2 line:', event.pickx, event.picky)


fig, ax = plt.subplots()
ax.set_title('custom picker for line data')
line, = ax.plot(rand(100), rand(100), 'o', picker=line_picker)
fig.canvas.mpl_connect('pick_event', onpick2)

산점도에서 선택

산점도는 ~matplotlib.collections.PathCollection에 의해 지원됩니다. 산점도를 생성하고 선택을 활성화합니다.

x, y, c, s = rand(4, 100)


def onpick3(event):
    ind = event.ind
    print('onpick3 scatter:', ind, x[ind], y[ind])


fig, ax = plt.subplots()
ax.scatter(x, y, 100*s, c, picker=True)
fig.canvas.mpl_connect('pick_event', onpick3)

이미지 선택

.Axes.imshow를 사용하여 플롯된 이미지는 ~matplotlib.image.AxesImage 객체입니다. 여러 이미지가 있는 그림을 생성하고 선택을 활성화합니다.

fig, ax = plt.subplots()
ax.imshow(rand(10, 5), extent=(1, 2, 1, 2), picker=True)
ax.imshow(rand(5, 10), extent=(3, 4, 1, 2), picker=True)
ax.imshow(rand(20, 25), extent=(1, 2, 3, 4), picker=True)
ax.imshow(rand(30, 12), extent=(3, 4, 3, 4), picker=True)
ax.set(xlim=(0, 5), ylim=(0, 5))


def onpick4(event):
    artist = event.artist
    if isinstance(artist, AxesImage):
        im = artist
        A = im.get_array()
        print('onpick4 image', A.shape)


fig.canvas.mpl_connect('pick_event', onpick4)

요약

이 랩에서는 선, 사각형, 텍스트, 산점도 및 이미지를 포함하여 Matplotlib 의 다양한 아티스트 (artist) 에서 선택을 활성화하는 방법을 배웠습니다. 또한, 더 복잡한 선택 동작을 활성화하기 위해 사용자 정의 히트 테스트 함수 (hit test functions) 를 정의하는 방법도 배웠습니다. 이 강력한 도구를 사용하면 사용자 작업에 응답하는 대화형 시각화를 만들 수 있습니다.