ম্যাটপ্ল্লোলিবের প্লট সাফ করার জন্য কখন ক্ল (), সিএলএফ () বা বন্ধ () বন্ধ করবেন?


540

ম্যাটপ্লটলিব সেখানে ফাংশন সরবরাহ করে:

cla()   # Clear axis
clf()   # Clear figure
close() # Close a figure window

এই ফাংশনগুলির মধ্যে পার্থক্য কী তা সম্পর্কে ডকুমেন্টেশন প্রচুর অন্তর্দৃষ্টি দেয় না। আমার প্রতিটি ফাংশন কখন ব্যবহার করা উচিত এবং এটি ঠিক কী করে?

উত্তর:


713

তারা সবাই আলাদা আলাদা কাজ করে, যেহেতু ম্যাটপ্লোটলিব হায়ারারিকিকাল ক্রম ব্যবহার করে যাতে কোনও চিত্র উইন্ডোতে এমন একটি চিত্র থাকে যা অনেকগুলি অক্ষের সমন্বয়ে থাকতে পারে। অতিরিক্তভাবে, পাইপ্লট ইন্টারফেস থেকে ফাংশন রয়েছে এবং Figureক্লাসে পদ্ধতি রয়েছে । আমি নীচের দুটি ক্ষেত্রেই আলোচনা করব।

পাইপ্লট ইন্টারফেস

pyplotহ'ল একটি মডিউল যা বেশ কয়েকটি ফাংশন সংগ্রহ করে যা ম্যাটপ্লটলিবকে কার্যকরী পদ্ধতিতে ব্যবহার করতে দেয়। আমি এখানে ধরে নিই যে pyplotআমদানি করা হয়েছে import matplotlib.pyplot as plt। এই ক্ষেত্রে, তিনটি পৃথক কমান্ড রয়েছে যা স্টাফগুলি সরিয়ে দেয়:

plt.cla()একটি অক্ষ সাফ করে , বর্তমান চিত্রটিতে বর্তমানে সক্রিয় অক্ষ। এটি অন্য অক্ষ অক্ষত রেখে দেয়।

plt.clf()সমস্ত বর্তমান চিত্রটি তার সমস্ত অক্ষ দিয়ে সাফ করে , তবে উইন্ডোটি খোলা ছেড়ে দেয়, যাতে এটি অন্য প্লটের জন্য পুনরায় ব্যবহার করা যেতে পারে।

plt.close()অন্যথায় নির্দিষ্ট না করা থাকলে একটি উইন্ডো বন্ধ করে দেয় যা বর্তমান উইন্ডো হবে।

কোন ফাংশন আপনার পক্ষে সবচেয়ে উপযুক্ত তা আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে।

close()ফাংশন উপরন্তু এক যা উইন্ডো বন্ধ তা নির্দিষ্ট করতে আপনাকে অনুমতি দেয়। যুক্তিটি হয় কোনও উইন্ডোতে প্রদত্ত একটি নম্বর বা নাম যখন এটি ব্যবহার করে তৈরি করা হয়েছিল figure(number_or_name)বা এটি figপ্রাপ্ত চিত্রের উদাহরণ হতে পারে , যেমন ব্যবহার করে fig = figure()। যদি কোনও যুক্তি না দেওয়া হয় close(), তবে বর্তমানে সক্রিয় উইন্ডোটি বন্ধ হয়ে যাবে। তদতিরিক্ত close('all'), বাক্য গঠন আছে , যা সমস্ত পরিসংখ্যান বন্ধ করে দেয়।

চিত্র শ্রেণীর পদ্ধতি

অতিরিক্তভাবে, Figureক্লাস পরিসংখ্যান সাফ করার জন্য পদ্ধতি সরবরাহ করে। আমি নিম্নলিখিতটি ধরে নিব figএটি একটি উদাহরণ Figure:

fig.clf()পুরো চিত্রটি সাফ করে দেয় । এই কলটি plt.clf()কেবলমাত্র figবর্তমান চিত্র হিসাবে সমান ।

fig.clear() একটি প্রতিশব্দ হয় fig.clf()

মনে রাখবেন যে এমনকি del figসম্পর্কিত চিত্র উইন্ডোটি বন্ধ করবে না। যতদূর আমি জানি চিত্রের উইন্ডোটি বন্ধ করার একমাত্র উপায় plt.close(fig)উপরে বর্ণিত হিসাবে ব্যবহার করা হচ্ছে ।


38
যেহেতু close()একটি অ-নির্দিষ্ট কমান্ড, তাই আমি ফিগার ক্লোজার নির্দিষ্ট করার উপায় খুঁজছি ( fig.close()কোনও ফাংশন নয়)। সঠিক বাক্য গঠন হল: plt.close(fig)
tyleha

কি সম্পর্কে clear(), আমি cla()পার্সাইট অক্ষগুলিতে কেবল cla()বিশেষভাবে চিকিত্সা করা হয় তার সাথে খুব বেশি পার্থক্য দেখিনি ।
ছদ্মবেশী

1
clear()আমার matplotlib.pyplot(ম্যাকোজে 1.4.2 সংস্করণ) কোনও ফাংশন নেই । আপনি কি আমাকে সম্পর্কিত ডকুমেন্টেশনে পরিচালিত করতে পারেন?
ডেভিড জুইকার

2
চিত্র এবং অক্ষ উভয় শ্রেণীর একটি clear()পদ্ধতি রয়েছে। Figure.clearসমতূল্য clfএবং Axes.clearসমতূল্য cla
সিগজিএফ

2
এটি কি জিউটারের সাথে কাজ করে? আমি স্মৃতি ত্রুটিগুলি আঘাত করতে থাকি কারণ আমি যখন জ্যোপিতে কোনও সেল পুনরায় চালিত করি তখন পরিসংখ্যানগুলি আবর্জনা সংগ্রহ করা হয় না।
সিএমসিডিগ্রাগনকাই

79

আমি আজ একটি আবিষ্কার করেছি যা আবিষ্কার করেছি। আপনার যদি এমন কোনও ফাংশন থাকে যা প্লটটিকে অনেক বার কল করে তবে আপনি কোনওভাবে প্রথমে স্মৃতিতে জমা না হয়ে plt.close(fig)বরং আরও ভাল ব্যবহার করেন use fig.clf()সংক্ষেপে যদি মেমরিটি উদ্বেগজনক হয় তবে plt.close (ডুমুর) ব্যবহার করুন (যদিও মনে হয় আরও ভাল উপায় আছে তবে প্রাসঙ্গিক লিঙ্কগুলির জন্য এই মন্তব্যটির শেষে যান)।

সুতরাং নিম্নলিখিত স্ক্রিপ্টটি একটি খালি তালিকা তৈরি করবে:

for i in range(5):
    fig = plot_figure()
    plt.close(fig)
# This returns a list with all figure numbers available
print(plt.get_fignums())

যদিও এই একটিতে পাঁচটি পরিসংখ্যান সহ একটি তালিকা তৈরি করা হবে।

for i in range(5):
    fig = plot_figure()
    fig.clf()
# This returns a list with all figure numbers available
print(plt.get_fignums())

উপরের ডকুমেন্টেশন থেকে আমার কাছে স্পষ্ট হয় না যে একটি চিত্র বন্ধ এবং একটি উইন্ডো বন্ধ করার মধ্যে পার্থক্য কি। সম্ভবত এটি স্পষ্ট হবে।

আপনি যদি সেখানে একটি সম্পূর্ণ স্ক্রিপ্ট চেষ্টা করতে চান তবে আপনার কাছে রয়েছে:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1000)
y = np.sin(x)

for i in range(5):
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(x, y)
    plt.close(fig)

print(plt.get_fignums())

for i in range(5):
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(x, y)
    fig.clf()

print(plt.get_fignums())

স্মৃতি যদি কোনও উদ্বেগের বিষয় হয়ে থাকে তবে ইতিমধ্যে কেউ SO তে একটি ওয়ার্ক-চারপাশে পোস্ট করেছেন দেখুন: রেফারেন্স গণনা করা হয়েছে এমন একটি চিত্র তৈরি করুন


26
রেফারেন্স গণনা প্রশ্নের সহায়ক ক্রস-রেফারেন্সের জন্য ধন্যবাদ। ইতিমধ্যে ম্যাটপ্ল্লিটিবের কাজ করা উচিতএটি সমানভাবে ভীতিজনক এবং বিস্ময়কর যে পরিসংখ্যানগুলি কখনও স্ট্যান্ডার্ড pyplotএপিআইয়ের আওতায় আবর্জনা সংগ্রহ করে না ।
সিসিল কারি

1
তবুও, আমি খুঁজে পেয়েছি যে যদি কাউকে অ্যানিমেশন তৈরি করতে হয় (উদাহরণস্বরূপ কিছু 2 ডি কনট্যুর / পিক্লোরমেশ মানচিত্র) পুরানো বন্ধ করে নতুন ফিগার প্যানেল তৈরি না করে চিত্রটি সাফ করা এবং নতুন ক্ষেত্রগুলি আঁকাই ভাল। গতি সম্পূর্ণ আলাদা হবে।
msi_gerva

11

plt.cla () অর্থ বর্তমানের অক্ষটি পরিষ্কার করুন

plt.clf () এর অর্থ বর্তমানের চিত্র পরিষ্কার করুন clear

এছাড়াও, এখানে plt.gca () বর্তমান অক্ষ পাবেন) এবং plt.gcf () (বর্তমান চিত্রটি পান)

এখানে আরও পড়ুন: ম্যাটপ্ল্লোলিব, পাইপ্লট, পাইলাব ইত্যাদি: এগুলির মধ্যে পার্থক্য কী এবং কখন ব্যবহার করতে হবে?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.