Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib에서 마우스 클릭 시까지 pylab 그래프 일시 정지하는 방법

pylab(매트플롯립)으로 생성한 그림을 키 입력이나 마우스 클릭이 있을 때까지 일시 정지하려면 button_press_event 이벤트를 활용하면 됩니다. 이 이벤트를 캔버스에 연결하고, 클릭 여부에 따라 상태를 전환하는 방식으로 그래프의 재생과 일시 정지를 제어할 수 있습니다.

구현 단계

  • 그림 크기를 설정하고 서브플롯 주변과 사이의 여백을 자동으로 조정합니다.
  • 백엔드를 TkAgg로 설정합니다.
  • 대화형(interactive) 모드를 켭니다.
  • 새 그림을 생성하거나 기존 그림을 활성화합니다.
  • 일시 정지 상태를 나타내는 변수 pause = False를 선언합니다.
  • button_press_event가 발생할 때마다 pause 값을 반전시켜 그림을 일시 정지하거나 다시 재생합니다.
  • 해당 함수를 이벤트에 연결(bind)합니다.
  • numpy를 사용해 데이터와 x, y 데이터 포인트를 생성합니다.
  • 무한 루프를 돌며 플롯의 선과 색상을 번갈아 변경합니다.
  • 그림을 화면에 표시하기 위해 show() 메서드를 사용합니다.

예제 코드

import matplotlib
from matplotlib import pyplot as plt
import numpy as np

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

matplotlib.use("TkAgg")

plt.ion()

fig = plt.figure()

pause = False

def onclick(event):
    global pause
    pause = not pause

fig.canvas.mpl_connect('button_press_event', onclick)

data = np.linspace(-10, 10, 100)

x = np.sin(data)
y = np.cos(data)

flag = 1

while True:
    if not pause:
        if flag == 1:
            fig.clear()
            plt.plot(data, y, color='red')
            flag = 0
        else:
            fig.clear()
            plt.plot(data, x, color='yellow')
            flag = 1
    fig.canvas.get_tk_widget().update()

실행 결과

Matplotlib에서 마우스 클릭 시까지 pylab 그래프 일시 정지하는 방법

코드를 실행하면 노란색 사인 곡선과 빨간색 코사인 곡선이 번갈아 가며 표시됩니다. 마우스 버튼을 한 번 클릭하면 그림이 해당 지점에서 일시 정지되고, 다시 클릭하면 애니메이션이 재개됩니다. 이처럼 button_press_event를 활용하면 사용자의 입력에 반응하는 인터랙티브한 그래프를 손쉽게 만들 수 있습니다.