Hooked 's answer 에 대해 좀 더 자세히 설명 하겠습니다 . 내가 그 대답을 처음 읽었을 때, 나는 clf()
새 인물을 만드는 대신 전화하라는 지시를 놓쳤다 . clf()
당신이 가서 다른 인물을 만들면 그 자체로는 도움이되지 않습니다.
다음은 경고를 일으키는 간단한 예입니다.
from matplotlib import pyplot as plt, patches
import os
def main():
path = 'figures'
for i in range(21):
_fig, ax = plt.subplots()
x = range(3*i)
y = [n*n for n in x]
ax.add_patch(patches.Rectangle(xy=(i, 1), width=i, height=10))
plt.step(x, y, linewidth=2, where='mid')
figname = 'fig_{}.png'.format(i)
dest = os.path.join(path, figname)
plt.savefig(dest) # write image to file
plt.clf()
print('Done.')
main()
경고를 피하려면 subplots()
루프 외부로 호출을 당겨야합니다 . 사각형을 계속 보려면로 전환 clf()
해야 cla()
합니다. 축 자체를 제거하지 않고 축을 지 웁니다.
from matplotlib import pyplot as plt, patches
import os
def main():
path = 'figures'
_fig, ax = plt.subplots()
for i in range(21):
x = range(3*i)
y = [n*n for n in x]
ax.add_patch(patches.Rectangle(xy=(i, 1), width=i, height=10))
plt.step(x, y, linewidth=2, where='mid')
figname = 'fig_{}.png'.format(i)
dest = os.path.join(path, figname)
plt.savefig(dest) # write image to file
plt.cla()
print('Done.')
main()
배치로 플롯을 생성하는 경우 cla()
와를 모두 사용해야 할 수도 있습니다 close()
. 배치에 불만을 제기하지 않고 20 개 이상의 플롯을 가질 수있는 문제가 발생했지만 20 배치 후에 불만을 제기했습니다. cla()
각 음모 close()
후 와 배치 마다 사용하여 문제를 해결했습니다 .
from matplotlib import pyplot as plt, patches
import os
def main():
for i in range(21):
print('Batch {}'.format(i))
make_plots('figures')
print('Done.')
def make_plots(path):
fig, ax = plt.subplots()
for i in range(21):
x = range(3 * i)
y = [n * n for n in x]
ax.add_patch(patches.Rectangle(xy=(i, 1), width=i, height=10))
plt.step(x, y, linewidth=2, where='mid')
figname = 'fig_{}.png'.format(i)
dest = os.path.join(path, figname)
plt.savefig(dest) # write image to file
plt.cla()
plt.close(fig)
main()
나는 배치 내에서 그림을 재사용 할 가치가 있는지 확인하기 위해 성능을 측정 했으며이 작은 샘플 프로그램은 close()
모든 플롯 후에 방금 호출했을 때 41 초에서 49 초 (20 % 느려짐)로 느려졌습니다 .
plt
완전히 무시하는 것이 좋습니다 . 예 : stackoverflow.com/a/16337909/325565 (내 답변 중 하나를 연결하지는 않지만 가장 빨리 찾을 수있는 답변입니다 ...)