मैं माटप्लोटलिब को कैसे बताऊं कि मुझे एक साजिश के साथ किया जाता है?


166

निम्न कोड दो पोस्टस्क्रिप्ट (.ps) फ़ाइलों के लिए प्लॉट करता है, लेकिन दूसरे में दोनों लाइनें हैं।

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.subplot(111)
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("first.ps")


plt.subplot(111)
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

मैं दूसरे प्लॉट के लिए नए सिरे से शुरू करने के लिए मैटलपोटलिब को कैसे बता सकता हूं?


3
शैली के एक बिंदु के रूप में, सबप्लॉट का उपयोग करने की कोई आवश्यकता नहीं है, जब आपके पास प्रति व्यक्ति केवल एक भूखंड हो।
ऑटोप्लेक्टिक

जवाबों:


124

आप figureएक नया प्लॉट बनाने के लिए उपयोग कर सकते हैं , उदाहरण के लिए, या closeपहले प्लॉट के बाद उपयोग कर सकते हैं ।


19
Pyplot ट्यूटोरियल "मल्टीपल फिगर" सेक्शन में clf () का उल्लेख करता है। ध्यान दें कि यदि आप पुराने के साथ एक बंद करने के बिना आंकड़ा () के साथ एक नया प्लॉट बनाते हैं () (भले ही आप GUI विंडो बंद करते हैं), तो pyplot आपके पुराने आंकड़े का एक संदर्भ रखता है, जो स्मृति रिसाव की तरह लग सकता है।
Jouni लालकृष्ण Seppänen

5
आप सभी पुराने आंकड़ों को हटाने के लिए plt.close () / pylab.close () का उपयोग कर सकते हैं
Calvin1602

1
पहले प्लॉट के बाद, क्या आपका मतलब है plt.savefig("first.ps")?
सिगुर

@ JouniK.Seppänen अपनी टिप्पणी में जोड़ने के लिए, पायथन डिफ़ॉल्ट रूप से आपको चेतावनी देगा यदि आप कई आंकड़े खोलते हैं: "रनटाइमवेयर: 20 से अधिक आंकड़े खोले गए हैं।"
आरएफ

173

एक स्पष्ट आंकड़ा कमांड है, और इसे आपके लिए करना चाहिए:

plt.clf()

यदि आपके पास एक ही आकृति में कई सबप्लॉट हैं

plt.cla()

वर्तमान कुल्हाड़ियों को साफ करता है।


1
धन्यवाद! यदि आप पीडीएफ बैकएंड का उपयोग कर रहे हैं (जो आपको कई भूखंडों को बचाने की अनुमति देता है) तो आपको प्रत्येक कॉल के बाद plt.save ()
बेन

4
मेरे मामले में, plt.clf () मेमोरी लीक को रोकने के लिए आंकड़ा लेकिन अपर्याप्त होने के लिए पर्याप्त था, लेकिन पहले कॉलिंग plt.close () ने मेमोरी लीक को रोक दिया। पायथन 2.7, मेटप्लोटलिब 1.1.1rc1 (ubuntu 12.04)। FYI करें।
डीजेडफ

29

जैसा कि डेविड कर्टनपो से कहा गया है, आंकड़ा () का उपयोग करें।

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.figure()
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("first.ps")


plt.figure()
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

या एक ही भूखंड के लिए सबप्लॉट (121) / सबप्लॉट (122), अलग स्थिति।

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.subplot(121)
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")

plt.subplot(122)
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

3
आप अभी भी उपयोग करना चाहिए plt.clf(), आंकड़े स्मृति में आयोजित की जाती हैं जब तक स्पष्ट रूप से बंद कर दिया
kaveish

13

बस plt.hold(False)पहले plt.plot से पहले दर्ज करें, और आप अपने मूल कोड से चिपके रह सकते हैं।


6
matplotlib == 2.0.2 में, मुझे यह संदेश मिलता है: MatplotlibDeprecationWarning: pyplot.hold पदावनत है।
जोनाथन

12

यदि आप एक वेब अनुप्रयोग में उदाहरण के लिए, इंटरप्लान्ट्स का उपयोग कर रहे हैं, तो शायद आप खोज रहे हैं

plt.show()

के बजाय plt.close()या plt.clf()


आपने मुझे समय का एक गुच्छा बचा लिया, जिसमें मुझे हारने की जरूरत नहीं थी
जूल

1

यदि उनमें से कोई भी काम नहीं कर रहा है, तो इसे जांचें .. यदि आपके पास संबंधित अक्ष के साथ डेटा के x और y सरणियाँ हैं। फिर जांचें कि किस सेल (ज्यूपिटर) में आपने एक्स और वाई को खाली किया है। ऐसा इसलिए है, क्योंकि हो सकता है कि आप डेटा को फिर से इनिशियल किए बिना x और y में अपग्रेड कर रहे हों। इसलिए प्लॉट में पुराना डेटा भी है। तो जांच लें कि ..

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