दिलचस्प पोस्ट
क्या Windows .xe "decompile" संभव है? या कम से कम विधानसभा को देखें? विज़ुअल स्टूडियो में एक बार दो परियोजनाएं चलाना सीएसएस पेज-ब्रेक को कितने पंक्तियों के साथ तालिका मुद्रित करने के लिए आवेदन कैसे करें? मैं Chrome DevTools में एक तत्व पर चलाई गई घटनाओं को कैसे देखूं? आप PostgreSQL में एक पठन-योग्य उपयोगकर्ता कैसे बना सकते हैं? jQuery ईवेंट को एक ट्रिगर करने के लिए ट्रिगर करने पर ट्रिगर होता है फायरबेज संग्रहण और एक्सेस-कंट्रोल-अनुमति-मूल निर्धारित करें कि $ .jax त्रुटि एक समय समाप्ति है सी कंपाइलर संरेखण पैडिंग को खत्म करने के लिए संरचना सदस्यों को पुनर्व्यवस्थित क्यों नहीं कर सकता? मैं टी-एसक्यूएल में अल्पविराम के साथ किसी संख्या को कैसे प्रारूपित कर सकता हूं? नई लाइन – जावा रेगेक्स सहित कोई भी अक्षर रिलेशनल डेटाबेस में प्रमुख मूल्य जोड़े क्रॉस-डोमेन अनुरोध (अंगुलर 2) कैसे बनाएं? विभिन्न ऊंचाई वाले एंड्रॉइड डिवाइस समान लेआउट फ़ोल्डर लेते हैं कैसे जावा से maven चलाने के लिए?

Matplotlib का उपयोग करके इसे प्रदर्शित करने के बजाय छवि फ़ाइल को प्लॉट सहेजें

मैं मक्खी पर भूखंडों को बनाने के लिए एक त्वरित और गंदे लिपि लिख रहा हूं। मैं प्रारंभिक बिंदु के रूप में नीचे दिए गए कोड का उपयोग कर रहा हूं ( Matplotlib प्रलेखन से):

from pylab import figure, axes, pie, title, show # Make a square figure and axes figure(1, figsize=(6, 6)) ax = axes([0.1, 0.1, 0.8, 0.8]) labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' fracs = [15, 30, 45, 10] explode = (0, 0.05, 0, 0) pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True) title('Raining Hogs and Dogs', bbox={'facecolor': '0.8', 'pad': 5}) show() # Actually, don't show, just save to foo.png 

मैं साजिश को जीयूआई पर प्रदर्शित नहीं करना चाहता हूं, इसके बजाय, मैं एक साजिश को एक फ़ाइल में सहेजना चाहता हूँ (उदाहरण के लिए, foo.png), उदाहरण के लिए, बैच लिपियों में इसका इस्तेमाल किया जा सकता है। मैं उसको कैसे करू?

वेब के समाधान से एकत्रित समाधान "Matplotlib का उपयोग करके इसे प्रदर्शित करने के बजाय छवि फ़ाइल को प्लॉट सहेजें"

जबकि सवाल का उत्तर दिया गया है, मैं सहेजे रूप में उपयोग करते समय कुछ उपयोगी टिप्स जोड़ना चाहता हूं। फ़ाइल प्रारूप एक्सटेंशन द्वारा निर्दिष्ट किया जा सकता है:

 savefig('foo.png') savefig('foo.pdf') 

क्रमशः एक रास्टर या सदिश उत्पादन दे देंगे, जो दोनों उपयोगी हो सकते हैं। इसके अलावा, आप पाएंगे कि pylab छवि के चारों ओर एक उदार, अक्सर अवांछनीय, सफेद स्थान छोड़ देता है। इसके साथ निकालें:

 savefig('foo.png', bbox_inches='tight') 

समाधान है:

 pylab.savefig('foo.png') 

जैसा कि दूसरों ने कहा है, plt.savefig() या fig1.savefig() वास्तव में एक छवि को बचाने का तरीका है।

हालांकि मैंने पाया है कि कुछ मामलों में (उदाहरण के लिए: स्पाइडर होने के plt.ion() : इंटरैक्टिव मोड = ऑन) यह आंकड़ा हमेशा दिखाया जाता है। मैं अपने विशाल लूप में आंकड़ा खिड़की के समापन को मजबूती से इस के आसपास काम करता हूं, इसलिए मेरे पास लूप के दौरान एक लाख खुले आंकड़े नहीं हैं:

 import matplotlib.pyplot as plt fig, ax = plt.subplots( nrows=1, ncols=1 ) # create figure & 1 axis ax.plot([0,1,2], [10,20,3]) fig.savefig('path/to/save/image/to.png') # save the figure to file plt.close(fig) # close the figure 

बस इस मुद्दे को संबोधित MatPlotLib प्रलेखन पर यह लिंक पाया: http://matplotlib.org/faq/howto_faq.html#generate-images-without-having-a-window-appear

वे कहते हैं कि पॉप अप करने से आंकड़े को रोकने का सबसे आसान तरीका है एक गैर-इंटरैक्टिव बैकेंड (जैसे एग्री) का उपयोग, matplotib.use(<backend>) माध्यम से, जैसे:

 import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt plt.plot([1,2,3]) plt.savefig('myfig') 

मैं अब भी व्यक्तिगत रूप से plt.close( fig ) का उपयोग करना पसंद करता plt.close( fig ) , तब से आपके पास कुछ आंकड़े छिपाने का विकल्प होता है (लूप के दौरान), लेकिन फिर भी पोस्ट-पाश डेटा प्रोसेसिंग के लिए आंकड़े प्रदर्शित करते हैं। हालांकि यह एक गैर-इंटरैक्टिव बैकएंड चुनने की तुलना में धीमी है – दिलचस्प होगा अगर किसी ने इसे परीक्षण किया

यदि आपको "चालू" आंकड़े की अवधारणा पसंद नहीं है, तो करें:

 import matplotlib.image as mpimg img = mpimg.imread("src.png") mpimg.imsave("out.png", img) 

अन्य जवाब सही हैं हालांकि, मुझे कभी-कभी लगता है कि मैं आंकड़ा वस्तु को बाद में खोलना चाहता हूं। उदाहरण के लिए, मैं लेबल के आकार को बदलना, एक ग्रिड जोड़ना, या अन्य प्रसंस्करण करना चाहूंगा एक संपूर्ण दुनिया में, मैं बस साजिश का निर्माण करने वाला कोड फिर से चलाता हूं, और सेटिंग्स को अनुकूलित करता हूं। अफसोस, दुनिया बिल्कुल सही नहीं है। इसलिए, पीडीएफ या पीएनजी को बचाने के अतिरिक्त, मैं जोड़ता हूं:

 with open('some_file.pkl', "wb") as fp: pickle.dump(fig, fp, protocol=4) 

इस तरह, मैं बाद में आंकड़ा ऑब्जेक्ट को लोड कर सकता हूं और सेटिंग्स को हेरफेर कर सकता हूं जैसा कि मैं करता हूं।

मैं स्टैक में प्रत्येक फ़ंक्शन / विधि के लिए स्रोत-कोड और locals() शब्दकोश के साथ स्टैक को भी लिखता हूं, ताकि मैं बाद में यह बता सकूंगा कि यह आंकड़ा किसने जेनरेट किया।

एनबी: सावधान रहें, क्योंकि कभी-कभी इस पद्धति में बड़ी फाइलें उत्पन्न होती हैं

 import datetime import numpy as np from matplotlib.backends.backend_pdf import PdfPages import matplotlib.pyplot as plt # Create the PdfPages object to which we will save the pages: # The with statement makes sure that the PdfPages object is closed properly at # the end of the block, even if an Exception occurs. with PdfPages('multipage_pdf.pdf') as pdf: plt.figure(figsize=(3, 3)) plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o') plt.title('Page One') pdf.savefig() # saves the current figure into a pdf page plt.close() plt.rc('text', usetex=True) plt.figure(figsize=(8, 6)) x = np.arange(0, 5, 0.1) plt.plot(x, np.sin(x), 'b-') plt.title('Page Two') pdf.savefig() plt.close() plt.rc('text', usetex=False) fig = plt.figure(figsize=(4, 5)) plt.plot(x, x*x, 'ko') plt.title('Page Three') pdf.savefig(fig) # or you can pass a Figure object to pdf.savefig plt.close() # We can also set the file's metadata via the PdfPages object: d = pdf.infodict() d['Title'] = 'Multipage PDF Example' d['Author'] = u'Jouni K. Sepp\xe4nen' d['Subject'] = 'How to create a multipage pdf file and set its metadata' d['Keywords'] = 'PdfPages multipage keywords author title subject' d['CreationDate'] = datetime.datetime(2009, 11, 13) d['ModDate'] = datetime.datetime.today() 

मैंने निम्नलिखित का इस्तेमाल किया:

 import matplotlib.pyplot as plt p1 = plt.plot(dates, temp, 'r-', label="Temperature (celsius)") p2 = plt.plot(dates, psal, 'b-', label="Salinity (psu)") plt.legend(loc='upper center', numpoints=1, bbox_to_anchor=(0.5, -0.05), ncol=2, fancybox=True, shadow=True) plt.savefig('data.png') plt.show() f.close() plt.close() 

मुझे इस आंकड़े को बचाने के बाद plt.show का उपयोग करना बहुत महत्वपूर्ण पाया, अन्यथा यह काम नहीं करेगा। पीएनजी में निर्यात आंकड़ा

आप चाहते हैं कि सामग्री बनाने के लिए साजिश () और अन्य कार्यों का उपयोग करने के बाद, आप स्क्रीन की साजिश रचने या फ़ाइल के बीच चयन करने के लिए इस तरह एक खंड का उपयोग कर सकते हैं:

 import matplotlib.pyplot as plt fig = plt.figure(figuresize=4, 5) # use plot(), etc. to create your plot. # Pick one of the following lines to uncomment # save_file = None # save_file = os.path.join(your_directory, your_file_name) if save_file: plt.savefig(save_file) plt.close(fig) else: plt.show() 

अगर, मेरी तरह, आप स्पाइडर आईडीई का उपयोग करते हैं, तो आपको इंटरैक्टिव मोड को अक्षम करना होगा:

plt.ioff()

(यह कमांड स्वचालित रूप से वैज्ञानिक स्टार्टअप के साथ शुरू की गई है)

यदि आप इसे फिर से सक्षम करना चाहते हैं, तो इसका उपयोग करें:

plt.ion()

समाधान :

 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.style.use('ggplot') ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000)) ts = ts.cumsum() plt.figure() ts.plot() plt.savefig("foo.png", bbox_inches='tight') 

यदि आप छवि को प्रदर्शित करना चाहते हैं साथ ही छवि उपयोग को सहेजना चाहते हैं:

 %matplotlib inline 

import matplotlib बाद import matplotlib

आप या तो कर सकते हैं:

 plt.show(hold=False) plt.savefig('name.pdf') 

और जीयूआई साजिश को बंद करने से पहले सहेजकर खत्म करने दें याद रखें। इस तरह आप पहले से चित्र देख सकते हैं।

वैकल्पिक रूप से, आप इसे plt.show() साथ देख सकते हैं, फिर जीयूआई को बंद करें और स्क्रिप्ट फिर से चलाएं, लेकिन इस बार plt.show() साथ plt.savefig() बदल plt.show()

वैकल्पिक रूप से, आप उपयोग कर सकते हैं

 fig, ax = plt.figure(nrows=1, ncols=1) plt.plot(...) plt.show() fig.savefig('out.pdf')