হুকডের উত্তরে প্রসারিত করার জন্য এখানে আরও কিছু বিশদ দেওয়া আছে । আমি যখন প্রথম উত্তরটি পড়েছিলাম, আমি 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 ব্যাচের পরে অভিযোগ করবে। আমি 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
পুরোপুরি বাইপাস করা থেকে ভাল । উদাহরণস্বরূপ স্ট্যাকওভারফ্লো.com/a/16337909/325565 (আমার নিজের উত্তরগুলির একটি প্লাগ না করা, তবে এটিই আমি দ্রুত খুঁজে পেতে পারি ...)