İşte Hooked'in cevabını genişletmek için biraz daha detay . Bu cevabı ilk okuduğumda, clf()
yeni bir figür oluşturmak yerine arama talimatını kaçırdım . clf()
tek başına gidip başka bir figür yaratırsanız yardımcı olmaz.
Uyarıya neden olan önemsiz bir örnek:
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()
Uyarıyı önlemek için, çağrıyı subplots()
döngünün dışına çekmem gerekiyor. Dikdörtgenler görmeye devam etmek için, ben anahtara ihtiyaç clf()
için cla()
. Bu, ekseni kendisi çıkarmadan ekseni temizler.
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()
Eğer gruplar halinde araziler elde edip, her iki kullanmanız gerekebilir cla()
ve close()
. Bir partinin şikayet etmeden 20'den fazla arsaya sahip olabileceği bir sorunla karşılaştım, ancak 20 partiden sonra şikayet ediyorum. Bunu cla()
her arsadan close()
sonra ve her partiden sonra kullanarak düzelttim .
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()
Performansı, bir parti içindeki figürü tekrar kullanmaya değip değmeyeceğini görmek için ölçtüm ve bu küçük örnek program close()
her arsadan sonra aradığımda 41'den 49'a (% 20 daha yavaş) yavaşladı .
plt
tamamen atlamanız daha iyi olabilir . Örneğin stackoverflow.com/a/16337909/325565 (Kendi cevaplarımdan birini takmamak için, ama en hızlı bulabildiğim ...)