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()실행 결과

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