हुक किए गए उत्तर पर विस्तार करने के लिए यहां थोड़ा और विस्तार दिया गया है । जब मैंने पहली बार उस उत्तर को पढ़ा, तो मैंने 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()
मैंने यह देखने के लिए प्रदर्शन को मापा कि क्या यह एक बैच के भीतर आकृति का पुन: उपयोग करने के लायक है, और यह छोटा सा नमूना कार्यक्रम 41s से 49s (20% धीमा) तक धीमा हो गया, जब मुझे बस close()
हर साजिश के बाद बुलाया गया था।
plt
पूरी तरह से दरकिनार कर सकते हैं। Eg stackoverflow.com/a/16337909/325565 (मेरे स्वयं के उत्तरों में से एक को प्लग करने के लिए नहीं, लेकिन यह वही है जिसे मैं सबसे जल्दी पा सकता हूं ...)