ต่อไปนี้เป็นรายละเอียดอีกเล็กน้อยที่จะขยายตัวในคำตอบที่ติดยาเสพติดของ ครั้งแรกที่ผมได้อ่านคำตอบที่ผมพลาดการเรียนการสอนที่จะเรียกแทนการสร้างร่างใหม่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()
หากคุณกำลังสร้างแปลงใน batches คุณอาจจะต้องใช้ทั้งสองและ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()
ฉันวัดประสิทธิภาพเพื่อดูว่ามันคุ้มค่าที่จะนำตัวเลขกลับมาใช้ในชุดใหม่หรือไม่และโปรแกรมตัวอย่างเล็ก ๆ นี้ชะลอตัวจาก 41s เป็น 49s (ช้าลง 20%) เมื่อฉันเพิ่งเรียกใช้close()
หลังจากทุกพล็อต
plt
ไปเลย เช่นstackoverflow.com/a/16337909/325565 (อย่าเสียบคำตอบของฉันเอง แต่มันเป็นคำตอบที่ฉันพบได้เร็วที่สุด ... )