Matplotlib에서 마우스 클릭 이벤트의 좌표를 저장하려면 button_press_event 이벤트를 활용하면 됩니다. 사용자가 그래프 위를 클릭할 때마다 해당 지점의 x, y 좌표를 실시간으로 콘솔에 출력하는 방법을 단계별로 알아보겠습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 간의 여백을 조정합니다.
- Figure와 서브플롯 집합을 생성합니다.
- 0부터 10 범위의 데이터로 선 그래프를 그립니다.
- onclick 함수를 button_press_event 이벤트에 연결(bind)합니다.
- 이벤트가 발생하면 해당 지점의 x와 y 데이터를 출력합니다.
- show() 메서드를 호출하여 그래프를 화면에 표시합니다.
예제 코드
from matplotlib import pyplot as plt
plt.rcParams['backend'] = 'TkAgg'
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
# 마우스 클릭 이벤트 좌표를 출력하는 함수
def onclick(event):
print([event.xdata, event.ydata])
# Figure와 서브플롯 생성
fig, ax = plt.subplots()
# 0부터 10 범위의 선 그래프 그리기
ax.plot(range(10))
# button_press_event와 onclick() 메서드 연결
fig.canvas.mpl_connect('button_press_event', onclick)
# 그래프 표시
plt.show()실행 결과
코드를 실행하면 다음과 같은 선 그래프가 나타납니다.
이 상태에서 그래프 위 임의의 위치를 클릭하면, 클릭한 지점의 좌표가 콘솔에 순서대로 출력됩니다.
[6.277811659536052 6.218189947945731] [4.9416949672083685 3.7079096112932475] [8.221254287227506 3.4145010811941963]
핵심 포인트 정리
- mpl_connect(): Figure 캔버스에 이벤트 핸들러를 등록하는 Matplotlib의 공식 메서드입니다. 첫 번째 인자로 이벤트 이름 문자열, 두 번째 인자로 콜백 함수를 전달합니다.
- event.xdata / event.ydata: 클릭 위치를 데이터 좌표계 기준으로 반환합니다. 픽셀 단위 좌표가 필요하다면 event.x와 event.y를 사용하면 됩니다.
- TkAgg 백엔드: 대화형 이벤트 처리를 위해 GUI 백엔드 설정이 필요합니다. TkAgg 외에도 Qt5Agg 등의 백엔드를 사용할 수 있습니다.
이 방식을 응용하면 클릭한 좌표를 리스트에 누적 저장하거나, 특정 조건에서만 동작하도록 확장하여 인터랙티브한 데이터 분석 도구를 만들 수 있습니다.