ต่อไปนี้เป็นรายละเอียดอีกเล็กน้อยที่จะขยายตัวในคำตอบที่ติดยาเสพติดของ ครั้งแรกที่ผมได้อ่านคำตอบที่ผมพลาดการเรียนการสอนที่จะเรียกแทนการสร้างร่างใหม่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 (อย่าเสียบคำตอบของฉันเอง แต่มันเป็นคำตอบที่ฉันพบได้เร็วที่สุด ... )