Matplotlib 대화형 함수

Beginner

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

소개

이 랩에서는 Matplotlib 의 대화형 함수 사용법을 배우겠습니다. 이러한 대화형 함수에는 ginput, waitforbuttonpress, 그리고 수동 clabel 배치가 포함됩니다. 이 랩의 목적은 이러한 함수를 사용하여 Matplotlib 에서 대화형 플롯을 만드는 방법을 이해하도록 돕는 것입니다. 이 랩이 끝나면 Matplotlib 에서 대화형 함수를 사용하여 플롯을 생성하고 수정할 수 있게 됩니다.

VM 팁

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

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

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

세 점을 클릭하여 삼각형 정의하기

이 단계에서는 세 점을 클릭하여 삼각형을 정의합니다. 이를 위해 ginputwaitforbuttonpress 함수를 사용합니다. ginput 함수를 사용하면 마우스로 플롯에서 점을 선택할 수 있으며, waitforbuttonpress 함수는 버튼 누름 이벤트를 기다립니다.

import time
import matplotlib.pyplot as plt
import numpy as np

def tellme(s):
    print(s)
    plt.title(s, fontsize=16)
    plt.draw()

plt.figure()
plt.xlim(0, 1)
plt.ylim(0, 1)

tellme('You will define a triangle, click to begin')

plt.waitforbuttonpress()

while True:
    pts = []
    while len(pts) < 3:
        tellme('Select 3 corners with mouse')
        pts = np.asarray(plt.ginput(3, timeout=-1))
        if len(pts) < 3:
            tellme('Too few points, starting over')
            time.sleep(1)  ## Wait a second

    ph = plt.fill(pts[:, 0], pts[:, 1], 'r', lw=2)

    tellme('Happy? Key click for yes, mouse click for no')

    if plt.waitforbuttonpress():
        break

    ## Get rid of fill
    for p in ph:
        p.remove()

삼각형 꼭지점으로부터의 거리에 따른 등고선

이 단계에서는 삼각형 꼭지점으로부터의 거리에 따라 등고선을 그립니다. 개별 점으로부터의 거리에 대한 함수를 정의하고 이 함수에 따라 등고선을 그립니다.

## Define a nice function of distance from individual pts
def f(x, y, pts):
    z = np.zeros_like(x)
    for p in pts:
        z = z + 1/(np.sqrt((x - p[0])**2 + (y - p[1])**2))
    return 1/z

X, Y = np.meshgrid(np.linspace(-1, 1, 51), np.linspace(-1, 1, 51))
Z = f(X, Y, pts)

CS = plt.contour(X, Y, Z, 20)

tellme('Use mouse to select contour label locations, middle button to finish')
CL = plt.clabel(CS, manual=True)

확대/축소 (Zoom)

이 단계에서는 플롯을 확대/축소합니다. ginput 함수를 사용하여 확대/축소 상자의 두 모서리를 선택하고, waitforbuttonpress 함수를 사용하여 확대/축소를 완료합니다.

tellme('Now do a nested zoom, click to begin')
plt.waitforbuttonpress()

while True:
    tellme('Select two corners of zoom, middle mouse button to finish')
    pts = plt.ginput(2, timeout=-1)
    if len(pts) < 2:
        break
    (x0, y0), (x1, y1) = pts
    xmin, xmax = sorted([x0, x1])
    ymin, ymax = sorted([y0, y1])
    plt.xlim(xmin, xmax)
    plt.ylim(ymin, ymax)

tellme('All Done!')
plt.show()

요약 (Summary)

이 랩에서는 Matplotlib 에서 대화형 함수를 사용하여 플롯을 생성하고 수정하는 방법을 배웠습니다. ginput, waitforbuttonpress, 그리고 수동 clabel 배치를 사용하여 삼각형을 정의하고, 삼각형 꼭지점으로부터의 거리에 따라 등고선을 그리고, 플롯을 확대/축소했습니다. 이러한 함수를 사용함으로써 사용자가 데이터와 상호 작용하고 더 자세히 탐색할 수 있는 대화형 플롯을 만들 수 있습니다.