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

Matplotlib 플롯을 키보드로 앞뒤로 스크롤하는 방법

Matplotlib에서 생성한 플롯을 키보드의 왼쪽·오른쪽 방향키로 자유롭게 앞뒤로 이동하며 탐색하고 싶다면, key_press_event 이벤트를 활용하면 됩니다. 이 글에서는 단계별로 구현 방법과 전체 예제 코드를 살펴보겠습니다.

구현 순서

  • 그림(figure) 크기를 설정하고 서브플롯 주변의 여백(padding)을 조정합니다.
  • NumPy를 사용해 curr_posy 데이터를 생성합니다.
  • figure() 메서드로 새 그림을 만들거나 기존 그림을 활성화합니다.
  • mpl_connect()를 사용해 키 입력 이벤트(key_press_event)에 처리 함수를 바인딩합니다.
  • add_subplot()으로 그림에 Axes(축 영역)를 추가합니다.
  • plot() 메서드를 사용해 curr_posy 데이터를 시각화합니다.
  • 키 이벤트 처리 함수에서 왼쪽·오른쪽 화살표 키 입력에 따라 곡선이 좌우로 이동하도록 구현합니다.
  • show() 메서드로 그림을 화면에 출력합니다.

예제 코드

import numpy as np
import matplotlib.pyplot as plt

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

curr_pos = np.linspace(-10, 10, 100)
y = np.sin(curr_pos)

def key_event(e):
    global curr_pos
    if e.key == "right":
        curr_pos = curr_pos + 1
    else:
        curr_pos = curr_pos - 1
    ax.cla()
    ax.plot(curr_pos, np.sin(curr_pos))
    fig.canvas.draw()

fig = plt.figure()
fig.canvas.mpl_connect('key_press_event', key_event)

ax = fig.add_subplot(111)
ax.plot(curr_pos, y)

plt.show()

실행 결과

Matplotlib 플롯을 키보드로 앞뒤로 스크롤하는 방법

동작 원리 설명

코드가 실행되면 사인(sine) 곡선이 그려진 창이 나타납니다. 이 상태에서 키보드의 왼쪽 또는 오른쪽 방향키를 누르면 key_press_event가 발생하고, 이벤트 핸들러인 key_event() 함수가 호출됩니다.

핸들러 내부에서는 눌린 키가 오른쪽 화살표면 x축 위치 값(curr_pos)을 1씩 증가시키고, 그 외의 키(왼쪽 화살표 포함)는 1씩 감소시킵니다. 이후 ax.cla()로 기존 그래프를 지운 뒤 새로운 위치의 데이터를 다시 그리고, fig.canvas.draw()를 호출해 캔버스를 갱신함으로써 플롯이 마치 앞뒤로 스크롤되는 것처럼 보이게 됩니다.

이 방식은 시계열 데이터나 신호 데이터를 인터랙티브하게 탐색할 때 매우 유용하게 활용할 수 있습니다.