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

Matplotlib에서 닫힌 그림(Figure)을 다시 표시하는 방법

Matplotlib에서는 한 번 close()로 닫아버린 그림(figure)도 새로운 캔버스 매니저(Canvas Manager)를 생성하고, 기존 그림을 새 캔버스의 figure에 할당하면 다시 화면에 표시할 수 있습니다. 이 글에서는 그 과정을 단계별로 살펴보겠습니다.

구현 단계

  • 그림 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
  • 새 그림을 만들거나 기존 그림을 활성화합니다.
  • NumPy를 사용해 x, y 데이터 포인트를 생성합니다.
  • plot() 메서드로 x, y 데이터를 그래프에 그립니다.
  • 그래프가 그려진 현재 그림을 close()로 닫습니다.
  • 이전 그림(fig)을 새로운 캔버스 figure에 저장합니다.
  • 해당 그림을 포함하는 캔버스를 설정합니다.
  • show() 메서드를 호출해 그림을 화면에 표시합니다.

예제 코드

import numpy as np
from matplotlib import pyplot as plt

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

fig = plt.figure()
x = np.linspace(-10, 10, 100)
y = np.sin(x)

plt.plot(x, y)
plt.close(fig)

new_fig = plt.figure()
new_manager = new_fig.canvas.manager
new_manager.canvas.figure = fig
fig.set_canvas(new_manager.canvas)

plt.show()

코드 설명

위 코드의 핵심 동작은 다음과 같습니다.

  • plt.close(fig): 그려진 그림 객체 자체는 메모리에 남아 있지만, 화면에는 더 이상 표시되지 않도록 창을 닫습니다.
  • new_manager = new_fig.canvas.manager: 새로 만든 그림의 캔버스 매니저를 가져옵니다.
  • new_manager.canvas.figure = fig: 새 캔버스가 참조하는 figure를 이전에 닫았던 fig로 교체합니다.
  • fig.set_canvas(new_manager.canvas): 원래 그림(fig)에 새 캔버스를 연결하여 렌더링이 가능하도록 만듭니다.

실행 결과

코드를 실행하면 먼저 sin 곡선이 그려진 후 그림이 닫히고, 이어서 새 캔버스에 동일한 그림이 다시 나타나 화면에 표시됩니다.

Matplotlib에서 닫힌 그림(Figure)을 다시 표시하는 방법Matplotlib에서 닫힌 그림(Figure)을 다시 표시하는 방법

마무리

이처럼 Matplotlib에서 닫힌 그림은 완전히 소멸하는 것이 아니라, 캔버스 매니저를 활용하면 언제든 다시 불러와 표시할 수 있습니다. 대화형 환경이나 GUI 애플리케이션에서 실수로 그림을 닫았을 때 유용하게 활용할 수 있는 기법입니다.