코딩연습

파이썬 figure에서 zoom in/out 가능한 방법은?

철인31호 2025. 1. 6. 07:21
반응형



Matplotlib에서는 `figure` 내에서 zoom in과 zoom out 기능을 구현하기 위해 여러 가지 접근 방법을 사용할 수 있습니다. 기본적으로 Matplotlib의 인터랙티브 모드와 함께 `Axes` 객체의 한계를 변경하거나, GUI 백엔드에서 제공하는 확대/축소 도구를 활용합니다.




1. Matplotlib의 기본 도구 활용 (인터랙티브 모드)


Matplotlib의 GUI 인터페이스에서는 자동으로 zoom in/out 기능을 제공합니다. 이를 사용하려면 인터랙티브 모드를 활성화하면 됩니다.


(1) 기본 설정으로 GUI 확대/축소

import matplotlib.pyplot as plt
plt.ion()  # 인터랙티브 모드 활성화
plt.plot([1, 2, 3, 4], [10, 20, 25, 30])
plt.title("기본 인터랙티브 모드의 확대/축소")
plt.show()



- 실행 후 그래프 상단의 확대/축소 아이콘(돋보기)을 사용해 zoom in/out이 가능합니다.
- 인터랙티브 모드는 GUI 백엔드(예: TkAgg, Qt5Agg)에서 지원합니다.





2. 프로그래밍 방식으로 Zoom 구현


(1) `set_xlim`과 `set_ylim`을 사용한 Zoom 설정
`Axes` 객체의 X, Y 축 범위를 수동으로 설정하여 특정 부분을 확대할 수 있습니다.

import matplotlib.pyplot as plt
# 데이터 생성
x = [1, 2, 3, 4, 5, 6]
y = [10, 20, 30, 40, 50, 60]
fig, ax = plt.subplots()
ax.plot(x, y)
# Zoom in: X축과 Y축 범위를 조정
ax.set_xlim(2, 4)  # X축 범위
ax.set_ylim(20, 40)  # Y축 범위
plt.title("Zoom In using set_xlim and set_ylim")
plt.show()









(2) 버튼을 활용한 동적 확대/축소
Matplotlib의 `mpl_connect` 이벤트를 사용하여 확대/축소를 동적으로 구현할 수 있습니다.

import matplotlib.pyplot as plt
# 데이터 생성
x = [1, 2, 3, 4, 5, 6]
y = [10, 20, 30, 40, 50, 60]
fig, ax = plt.subplots()
ax.plot(x, y)
# 확대/축소 함수
def zoom(event):
    if event.button == 'up':  # Zoom in
        ax.set_xlim(ax.get_xlim()[0] * 0.9, ax.get_xlim()[1] * 0.9)
        ax.set_ylim(ax.get_ylim()[0] * 0.9, ax.get_ylim()[1] * 0.9)
    elif event.button == 'down':  # Zoom out
        ax.set_xlim(ax.get_xlim()[0] * 1.1, ax.get_xlim()[1] * 1.1)
        ax.set_ylim(ax.get_ylim()[0] * 1.1, ax.get_ylim()[1] * 1.1)
    fig.canvas.draw_idle()  # 그래프 업데이트
# 마우스 휠 이벤트 연결
fig.canvas.mpl_connect('scroll_event', zoom)
plt.title("Mouse Wheel Zoom")
plt.show()


- 마우스 휠을 위로 스크롤하면 zoom in.
- 마우스 휠을 아래로 스크롤하면 zoom out.




3. 기타 고급 방법


(1) `panzoom` 플러그인 활용
Matplotlib의 `mpl_toolkits.axes_grid1` 라이브러리의 도구를 사용하여 확대/축소를 더 정교하게 제어할 수 있습니다.

pip install mpl_toolkits


(2) Bokeh 및 Plotly를 사용한 대안
Matplotlib의 인터랙티브 기능이 부족하다면 **Bokeh**나 **Plotly** 같은 시각화 라이브러리를 사용해 강력한 zoom 기능을 활용할 수 있습니다.

from bokeh.plotting import figure, show
p = figure(title="Zoom In/Out Example", tools="wheel_zoom,pan,reset")
p.line([1, 2, 3, 4, 5], [10, 20, 30, 40, 50], line_width=2)
show(p)



4. 다양한 방법으로 plot 활용


Matplotlib에서는 GUI 도구를 통한 간단한 확대/축소부터 `mpl_connect` 이벤트를 활용한 동적 zoom까지 구현할 수 있습니다. 고급 기능이 필요하다면 Bokeh나 Plotly 같은 대안 라이브러리도 고려할 수 있습니다.

반응형