Matplotlib는 다음과 같은 기능을 제공합니다.
cla() # Clear axis
clf() # Clear figure
close() # Close a figure window
설명서에는 이러한 기능의 차이점이 무엇인지에 대한 많은 통찰력이 없습니다. 각 기능은 언제 사용해야하며 정확히 어떻게해야합니까?
답변
matplotlib은 그림 창에 많은 축으로 구성된 그림이 포함 된 계층 적 순서를 사용하므로 모두 서로 다른 작업을 수행합니다. 또한 pyplot 인터페이스의 함수가 있으며 Figure
클래스에 메소드가 있습니다 . 아래 두 경우 모두에 대해 설명하겠습니다.
pyplot 인터페이스
pyplot
matplotlib을 기능적으로 사용할 수 있도록 몇 가지 기능을 수집하는 모듈입니다. 여기서는 pyplot
로 가져온 것으로 가정합니다 import matplotlib.pyplot as plt
. 이 경우 물건을 제거하는 세 가지 명령이 있습니다.
plt.cla()
axes , 즉 현재 그림에서 현재 활성화 된 축을 지 웁니다 . 다른 축은 그대로 둡니다.
plt.clf()
모든 축으로 현재 그림 전체를 지우지 만 창을 열어두고 다른 플롯에 재사용 할 수 있습니다.
plt.close()
달리 지정하지 않으면 현재 창이 될 window를 닫습니다 .
가장 적합한 기능은 사용 사례에 따라 다릅니다.
또한이 close()
기능을 통해 어떤 창을 닫아야하는지 지정할 수 있습니다. 인수는 창을 사용하여 만들 때 창에 주어진 숫자 또는 이름 figure(number_or_name)
이거나를 사용하여 fig
얻은 그림 인스턴스 일 수 있습니다 fig = figure()
. 에 인수가 없으면 close()
현재 활성화 된 창이 닫힙니다. 또한 close('all')
모든 그림을 닫는 구문이 있습니다.
Figure 클래스의 메소드
또한이 Figure
클래스는 그림을 지우는 방법을 제공합니다. 나는 다음과 같이 가정 fig
합니다 Figure
:
fig.clf()
전체 그림을 지 웁니다 . 이 호출은 현재 수치 인 plt.clf()
경우에만 해당됩니다 fig
.
fig.clear()
의 동의어입니다 fig.clf()
del fig
연관된 그림 창을 닫지 않아도 됩니다. 내가 아는 한 그림 창을 닫는 유일한 방법 plt.close(fig)
은 위에서 설명한대로 사용 하는 것입니다.
답변
오늘 내가 발견 한 경고가 있습니다. 플롯을 여러 번 호출하는 함수가있는 경우 어떻게 든 첫 번째 메모리 plt.close(fig)
대신 fig.clf()
메모리에 누적되지 않는 것이 좋습니다 . 간단히 말해서 메모리가 중요한 경우 plt.close (fig)를 사용하십시오 ( 더 나은 방법이있는 것 같지만 관련 링크는이 주석의 끝으로 이동하십시오).
따라서 다음 스크립트는 빈 목록을 생성합니다.
for i in range(5):
fig = plot_figure()
plt.close(fig)
# This returns a list with all figure numbers available
print(plt.get_fignums())
이것에 5 개의 숫자가있는리스트가 생성됩니다.
for i in range(5):
fig = plot_figure()
fig.clf()
# This returns a list with all figure numbers available
print(plt.get_fignums())
위의 문서에서 그림을 닫는 것과 창을 닫는 것의 차이점은 무엇인지 명확하지 않습니다. 어쩌면 그것은 분명해질 것입니다.
완전한 스크립트를 사용하려면 다음이 있습니다.
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1000)
y = np.sin(x)
for i in range(5):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y)
plt.close(fig)
print(plt.get_fignums())
for i in range(5):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y)
fig.clf()
print(plt.get_fignums())
누군가가 이미 해결 방법을 게시 한 메모리 문제가 우려
되는 경우 참조 카운트가 계산 된 그림 만들기
답변
plt.cla () 은 현재 축이 깨끗함을 의미합니다.
plt.clf () 는 명확한 현재 그림을 의미합니다
또한 plt.gca () (현재 축 가져 오기) 및 plt.gcf () (현재 그림 가져 오기)가 있습니다
여기에서 더 읽으십시오 : Matplotlib, Pyplot, Pylab 등 : 이것들과 각각의 사용 시점의 차이점은 무엇입니까?