Ini sedikit lebih detail untuk diperluas pada jawaban Hooked . Ketika saya pertama kali membaca jawaban itu, saya melewatkan instruksi untuk menelepon clf()
alih-alih membuat angka baru . clf()
sendiri tidak membantu jika Anda kemudian pergi dan membuat gambar lain.
Berikut ini contoh sepele yang menyebabkan peringatan:
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()
Untuk menghindari peringatan itu, saya harus menarik panggilan ke subplots()
luar loop. Agar terus melihat persegi panjang, saya harus beralih clf()
ke cla()
. Itu membersihkan sumbu tanpa melepas sumbu itu sendiri.
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()
Jika Anda membuat plot dalam batch, Anda mungkin harus menggunakan keduanya cla()
dan close()
. Saya mengalami masalah di mana satu batch dapat memiliki lebih dari 20 plot tanpa mengeluh, tetapi akan mengeluh setelah 20 batch. Saya memperbaikinya dengan menggunakan cla()
setelah setiap plot, dan close()
setelah setiap batch.
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()
Saya mengukur kinerja untuk melihat apakah layak menggunakan kembali angka dalam satu batch, dan program sampel kecil ini melambat dari 41 menjadi 49 (20% lebih lambat) ketika saya baru saja menelepon close()
setelah setiap plot.
plt
semuanya. Misalnya stackoverflow.com/a/16337909/325565 (Bukan untuk menyambungkan salah satu jawaban saya sendiri, tetapi itu adalah jawaban yang paling cepat saya temukan ...)