एक बहुत ही उच्च गुणवत्ता में अजगर में छवियों को बचाने


109

मैं बहुत उच्च गुणवत्ता पर अजगर भूखंडों को कैसे बचा सकता हूं?

यही है, जब मैं पीडीएफ फाइल में सहेजे गए ऑब्जेक्ट को ज़ूम इन करता रहता हूं, तो कोई धुंधलापन नहीं है?

इसके अलावा, इसे बचाने के लिए सबसे अच्छा तरीका क्या होगा?

png, eps? या कुछ और? मैं नहीं कर सकता pdfक्योंकि एक छिपी हुई संख्या है जो Latexmkसंकलन के साथ गड़बड़ करती है ।

जवाबों:


153

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

plt.savefig('destination_path.eps', format='eps')

मैंने पाया है कि ईपीएस फाइलें सबसे अच्छा काम करती हैं और dpiपैरामीटर वही है जो वास्तव में उन्हें एक दस्तावेज में अच्छा दिखता है।

अपडेट करें:

कॉल करने से पहले केवल कॉल करने से पहले आकृति के उन्मुखीकरण को निर्दिष्ट करने के लिए plt.savefig, लेकिन कॉल बनाने के बाद (यह मानते हुए कि आपने नाम के साथ कुल्हाड़ियों का उपयोग करके प्लॉट किया है ax):

ax.view_init(elev=elevation_angle, azim=azimuthal_angle)

जहां elevation_angleएक संख्या (डिग्री में) ध्रुवीय कोण (ऊर्ध्वाधर z अक्ष से नीचे) azimuthal_angleनिर्दिष्ट करता है और अजीमुथल कोण (z अक्ष के आसपास ) निर्दिष्ट करता है।

मुझे लगता है कि छवि को पहले प्लॉट करके और फिर इसे घुमाने से इन मूल्यों को निर्धारित करना सबसे आसान है और कोणों के मौजूदा मूल्यों को वास्तविक भूखंड के ठीक नीचे खिड़की के नीचे दिखाई देता है। ध्यान रखें कि x, y, z, स्थितियाँ डिफ़ॉल्ट रूप से दिखाई देती हैं, लेकिन जब आप छवि को खींचना + घुमाना शुरू करते हैं, तो दो कोणों से प्रतिस्थापित किया जाता है।


@ spencerlon2 क्या होगा अगर मैं बचत करने से पहले आकृति के अभिविन्यास को बदलना चाहता हूं?
डस्टिन

13
हमें DPI पैरामीटर की आवश्यकता क्यों है? एप्स एक वेक्टर प्रारूप नहीं है?
मकोवा

1
अच्छी बात - svg, pdf, eps जैसे वेक्टर फॉर्मेट के लिए DPI की जरूरत नहीं है
spencerlyon2

आप चाहें format='eps'तो छोड़ सकते हैं । इस मामले में प्रारूप फ़ाइल नाम से अनुमानित है।
टाइमगैब

72

बस मेरे परिणामों को जोड़ने के लिए, matplotlib का उपयोग भी करें।

.eps ने मेरे सभी पाठ बोल्ड कर दिए और पारदर्शिता हटा दी। .svg ने मुझे उच्च-रिज़ॉल्यूशन वाली तस्वीरें दीं जो वास्तव में मेरे ग्राफ की तरह दिखती थीं।

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# Do the plot code
fig.savefig('myimage.svg', format='svg', dpi=1200)

मैंने 1200 डीपीआई का उपयोग किया क्योंकि बहुत से वैज्ञानिक पत्रिकाओं को 1200/600/300 डीपीआई में छवियों की आवश्यकता होती है जो इस बात पर निर्भर करता है कि छवि क्या है। GiMP या Inkscape में वांछित डीपीआई और प्रारूप में बदलें।

संपादित करें: जाहिर है कि डीपीआई कोई मायने नहीं रखता है। एसवीजी वेक्टर ग्राफिक्स हैं और "अनंत संकल्प" हैं।


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

मैं आपके svg के फ़ाइल आकार को कम करने के लिए Scour ( github.com/scour-project/scour ) की अत्यधिक अनुशंसा करता हूं । यदि मैं .svgz संपीड़ित प्रारूप का उपयोग करता हूं तो सबसे आक्रामक सेटिंग पर मैं अपनी फ़ाइल का आकार मूल के 50% तक घटा सकता हूं - 5%।
ग्रोफेट

8

ठीक है, मुझे spencerlyon2 का जवाब काम करते हुए मिला, हालाँकि किसी को भी खुद को यह पता नहीं होगा कि उस एक लाइन का क्या करना है, मुझे इसे इस तरह करना था:

beingsaved = plt.figure()

# some scatters
plt.scatter(X_1_x, X_1_y)
plt.scatter(X_2_x, X_2_y)

beingsaved.savefig('destination_path.eps', format='eps', dpi=1000)

6

यदि आप मैटप्लोटलिब के बजाय सीबोर्न प्लॉट्स के साथ काम कर रहे हैं , तो आप इस तरह से .png इमेज को सेव कर सकते हैं।

मान लीजिए कि आपके पास एक matrixवस्तु है (या तो पांडा या सुन्न), और आप एक हीटमैप लेना चाहते हैं:

import seaborn as sb

image = sb.heatmap(matrix)   # this gets you the heatmap
image.figure.savefig("C:/Your/Path/ ... /your_image.png")   # this saves it

यह कोड सीबॉर्न के नवीनतम संस्करण के साथ संगत है। Stackoverflow के आसपास अन्य कोड केवल पिछले संस्करणों के लिए काम किया।

एक और तरीका मुझे यह पसंद है। मैंने अगली छवि का आकार निम्नानुसार निर्धारित किया है:

plt.subplots(figsize=(15,15))

और फिर बाद में मैं कंसोल में आउटपुट को प्लॉट करता हूं, जिसमें से मैं इसे कॉपी-पेस्ट कर सकता हूं जहां मैं चाहता हूं। (चूंकि सीबर्न मैटप्लेटिब के शीर्ष पर बनाया गया है, इसलिए कोई समस्या नहीं होगी।)


5

आप एक चित्र को 1920x1080 (या 1080p) का उपयोग करके सहेज सकते हैं:

fig = plt.figure(figsize=(19.20,10.80))

आप बहुत अधिक या कम जा सकते हैं। उपरोक्त समाधान मुद्रण के लिए अच्छी तरह से काम करते हैं, लेकिन इन दिनों आप चाहते हैं कि बनाई गई छवि PNG / JPG में जाए या एक विस्तृत स्क्रीन प्रारूप में दिखाई दे।

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