matplotlib에 플롯이 완료되었음을 어떻게 알 수 있습니까?


166

다음 코드는 두 개의 PostScript (.ps) 파일로 플로팅 되지만 두 번째 파일에는 두 줄이 모두 포함되어 있습니다.

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.subplot(111)
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("first.ps")


plt.subplot(111)
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

matplotlib에게 두 번째 줄거리에 대해 새로 시작하도록하려면 어떻게해야합니까?


3
스타일 포인트로, 그림 당 하나의 플롯 만있는 경우 서브 플롯을 사용할 필요가 없습니다.
Autoplectic 2016

답변:


124

당신은 사용할 수 있습니다 figure예를 들어, 새로운 플롯을 만들거나 사용하는 close첫 번째 플롯 후.


19
pyplot 튜토리얼은 "복수 그림"섹션에서 clf ()를 언급합니다. GUI 창을 닫아도 close ()로 이전 플롯을 닫지 않고 figure ()를 사용하여 새 플롯을 만들면 pyplot은 이전 그림에 대한 참조를 유지하므로 메모리 누수처럼 보일 수 있습니다.
Jouni K. Seppänen

5
plt.close () / pylab.close ()를 사용하여 모든 오래된 숫자를 제거 할 수 있습니다
Calvin1602

1
첫 줄거리 후, 당신은 이후를 의미 plt.savefig("first.ps")합니까?
Sigur

@ JouniK.Seppänen 댓글에 추가하기 위해 파이썬은 기본적으로 "RuntimeWarning : 20 개 이상의 그림이 열렸습니다."라는 많은 그림을 열면 경고합니다.
rph

173

명확한 그림 명령이 있으며 다음과 같이해야합니다.

plt.clf()

같은 그림에 여러 개의 하위 그림이있는 경우

plt.cla()

현재 축을 지 웁니다.


1
감사! PDF 백엔드를 사용하는 경우 (여러 플롯을 저장할 수 있음) plt.save ()를 호출 할 때마다이를 호출해야합니다.
Ben DeMott

4
필자의 경우 plt.clf ()는 그림을 지우는 데 충분했지만 메모리 누수를 중지하기에는 충분하지 않았지만 먼저 plt.close ()를 호출하면 메모리 누수가 중지되었습니다. Python 2.7, matplotlib 1.1.1rc1 (우분투 12.04). 참고로
DJDuff

29

David Cournapeau에서 언급했듯이 figure ()를 사용하십시오.

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.figure()
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("first.ps")


plt.figure()
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

또는 동일한 플롯, 다른 위치에 대해 subplot (121) / subplot (122).

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.subplot(121)
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")

plt.subplot(122)
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

3
당신은 여전히 ​​사용해야합니다 plt.clf(), 숫자는 명시 적으로 닫힐 때까지 메모리에 유지됩니다
kaveish

13

plt.hold(False)첫 번째 plt.plot 전에 입력 하면 원래 코드를 유지할 수 있습니다.


6
matplotlib == 2.0.2에서 다음 메시지가 나타납니다. MatplotlibDeprecationWarning : pyplot.hold는 사용되지 않습니다.
Jonathan

12

예를 들어 웹 애플리케이션 (예 : ipython)에서 대화식으로 Matplotlib를 사용하는 경우

plt.show()

plt.close()또는 대신 plt.clf().


당신은 내가 잃을 필요가 없었던 많은 시간을 절약했습니다
reabow

1

그들 중 아무것도 작동하지 않으면 이것을 확인하십시오. 각 축을 따라 x 및 y 배열의 데이터가 있는지 말하십시오. 그런 다음 x와 y를 초기화 한 셀 (jupyter)을 비우십시오. 데이터를 다시 초기화하지 않고 x 및 y에 데이터를 추가하고 있기 때문일 수 있습니다. 플롯에는 오래된 데이터가 있습니다. 그러니 확인 해봐 ..

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.