Matplotlib में एक प्लाट को साफ़ करने के लिए कब (), clf () या क्लोज़ () का उपयोग करना है?


540

Matplotlib वहाँ कार्य प्रदान करता है:

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

प्रलेखन इन कार्यों के बीच अंतर क्या है में बहुत अंतर्दृष्टि प्रदान नहीं करता है। मुझे प्रत्येक फ़ंक्शन का उपयोग कब करना चाहिए और वास्तव में यह क्या करता है?

जवाबों:


713

वे सभी अलग-अलग चीजें करते हैं, क्योंकि matplotlib एक पदानुक्रमित क्रम का उपयोग करता है जिसमें एक आंकड़ा विंडो में एक आकृति होती है जिसमें कई अक्ष शामिल हो सकते हैं। इसके अतिरिक्त, pyplot इंटरफ़ेस से फ़ंक्शन हैं और Figureवर्ग पर विधियां हैं । मैं नीचे दोनों मामलों पर चर्चा करूंगा।

pyplot इंटरफ़ेस

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)
तेलेहा

किस बारे में clear(), मुझे cla()केवल इस बात से ज्यादा फर्क नहीं देखा गया है कि केवल परजीवी कुल्हाड़ियों का ही cla()इलाज किया जाता है।

1
clear()मेरे matplotlib.pyplot(MacOS पर संस्करण 1.4.2) में कोई फ़ंक्शन नहीं है । क्या आप मुझे संबंधित दस्तावेज पर निर्देशित कर सकते हैं?
डेविड ज़्विकर

2
चित्र और अक्ष वर्ग दोनों में एक clear()विधि है। के Figure.clearबराबर clfऔर Axes.clearबराबर है cla
21

2
क्या यह जुपिटर के संबंध में काम करता है? मैं मेमोरी एरर को टालता रहता हूं क्योंकि जब मैं ज्यूपिटर में सेल करता हूं तो आंकड़े इकट्ठा नहीं हो रहे हैं।
CMCDragonkai

79

बस एक चेतावनी है जिसे मैंने आज खोजा है। यदि आपके पास एक फ़ंक्शन है जो किसी भूखंड को बहुत बार कॉल कर रहा है तो आप किसी भी तरह से बेहतर उपयोग plt.close(fig)करते हैं, 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())

यदि स्मृति चिंता का विषय है, तो किसी ने पहले से ही एसओ में एक काम के आसपास पोस्ट किया है: एक आंकड़ा बनाएं जिसे संदर्भ गिना जाता है


26
संदर्भ गणना प्रश्न के लिए सहायक क्रॉस-रेफरेंस के लिए धन्यवाद। ठीक इसी तरह से माटप्लोटलिब को पहले से ही काम करना चाहिएयह समान रूप से भयानक और भयावह है कि आंकड़े कभी भी मानक pyplotएपीआई के तहत एकत्र नहीं होते हैं ।
सेसिल करी

1
फिर भी, मैंने पाया है कि अगर किसी को एनिमेशन बनाना है (उदाहरण के लिए कुछ 2D समोच्च / पीसीओलेर्मेश मैप्स) तो यह आंकड़ा साफ करने और पुराने को बंद करने और नए फिगर पैनल बनाने के बजाय नए क्षेत्रों को आकर्षित करने के लिए बेहतर है। गति पूरी तरह से अलग होगी।
msi_gerva

11

plt.cla () का अर्थ है स्पष्ट वर्तमान अक्ष

plt.clf () का अर्थ है स्पष्ट वर्तमान आंकड़ा

इसके अलावा, वहाँ plt.gca () (करंट एक्सिस) और plt.gcf () (करंट फ़िगर प्राप्त करें)

यहाँ और पढ़ें: Matplotlib, Pyplot, Pylab आदि: इनमें से क्या अंतर है और प्रत्येक का उपयोग कब करना है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.