Matplotlib - एक उच्च रिज़ॉल्यूशन ग्राफ की साजिश कैसे करें?


88

मैंने कुछ प्रयोगात्मक परिणामों की साजिश रचने के लिए matplotlib का उपयोग किया है (यहाँ इस पर चर्चा की: फाइलों पर लूपिंग और साजिश रच रहा है । हालाँकि, चित्र को दाईं ओर क्लिक करके चित्र को सहेजने से बहुत खराब गुणवत्ता / कम रिज़ॉल्यूशन की छवियां मिलती हैं।

from glob import glob
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

# loop over all files in the current directory ending with .txt
for fname in glob("./*.txt"):
    # read file, skip header (1 line) and unpack into 3 variables
    WL, ABS, T = np.genfromtxt(fname, skip_header=1, unpack=True)

    # first plot
    plt.plot(WL, T, label='BN', color='blue')

    plt.xlabel('Wavelength (nm)')
    plt.xlim(200,1000)
    plt.ylim(0,100)
    plt.ylabel('Transmittance, %')
    mpl.rcParams.update({'font.size': 14})
    #plt.legend(loc='lower center')
    plt.title('')
    plt.show()
    plt.clf()


    # second plot
    plt.plot(WL, ABS, label='BN', color='red')
    plt.xlabel('Wavelength (nm)')
    plt.xlim(200,1000)
    plt.ylabel('Absorbance, A')
    mpl.rcParams.update({'font.size': 14})
    #plt.legend()
    plt.title('')
    plt.show()
    plt.clf()

मैं क्या देख रहा हूँ का उदाहरण ग्राफ : उदाहरण ग्राफ

जवाबों:


126

आप savefig()एक छवि फ़ाइल को निर्यात करने के लिए उपयोग कर सकते हैं :

plt.savefig('filename.png')

इसके अलावा, आप dpiकुछ स्केलर मान के लिए तर्क निर्दिष्ट कर सकते हैं , उदाहरण के लिए:

plt.savefig('filename.png', dpi=300)

मैं उस तरह फ़ाइल नाम निर्दिष्ट नहीं कर सकता। स्क्रिप्ट 'fname in glob ("./*। Txt")' 'में फाइलों के माध्यम से जाती है।
10

आपको जो भी फाइल पसंद है उसे कॉल करें
ओहाड ईटन

यह डेटा को अधिलेखित कर देगा और केवल दो चित्र देगा। क्या यह नहीं है? मेरा उद्देश्य प्रत्येक पाठ फ़ाइल के लिए दो ग्राफ प्राप्त करना है।
10

तो आप कुछ ऐसा कर सकते हैं plt.savefig(fname + 'Graph1.png')औरplt.savefig(fname + 'Graph2.png')
Ohad Eytan

महान! पहले ग्राफ के लिए plt.savefig (fname + 'Graph1a.png', dpi = 600) और दूसरे के लिए plt.savefig (fname + 'Graph1a.png', dpi = 600) ने समस्या हल कर दी। धन्यवाद!
10

35

plt.figure(dpi=1200)अपने सभी उपयोग करने से पहले plt.plot...और अंत में plt.savefig(...देखें: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.figure और http://matplotlib.org/api/pyplotlap.org.html#matplotlib.pyplot.savefigfig


@deepfriedcyanide ने मुझे यह कहकर मेरे पुराने प्रश्न में मदद की: " savefig के लिए फ़ाइल नाम तर्क सिर्फ एक स्ट्रिंग है ताकि आप कुछ ऐसा कर सकें: plt.savefig ('फ़ोल्डर / फ़ाइल% d.png% n) जो कि आपके द्वारा गिना जाता है प्रत्येक साजिश के बाद। "लेकिन मुझे अभी तक यह विचार नहीं आया है। मुझे अपनी स्क्रिप्ट में यह कोड कहां और कैसे रखना चाहिए?
10

1
महान यह मेरे लिए काम किया! अब मेरे प्लॉट 4K XD
गोंजालो गार्सिया

23

आप अपने ग्राफ को दोषरहित गुणवत्ता के लिए svg के रूप में सहेज सकते हैं:

import matplotlib.pylab as plt

x = range(10)

plt.figure()
plt.plot(x,x)
plt.savefig("graph.svg")

5
आप पीडीएफ के रूप में भी बचा सकते हैं plt.savefig("graph.pdf")जो दोषरहित है
डैनी

6

भविष्य के पाठकों के लिए जो मैटलपोटलिब से उच्च रिज़ॉल्यूशन की छवियों को सहेजने का प्रयास करते हुए यह प्रश्न करते हैं, मैंने ऊपर और अन्य जगहों पर कुछ उत्तरों की कोशिश की है, और उन्हें यहां प्रस्तुत किया है।

सबसे अच्छा परिणाम :plt.savefig('filename.pdf')

और फिर इस पीडीएफ को कमांड लाइन पर एक पीएनजी में परिवर्तित करना ताकि आप इसे पावरपॉइंट में उपयोग कर सकें:

pdftoppm -png -r 300 filename.pdf filename

या बस पीडीएफ खोलना और उस छवि को क्रॉप करना जिसकी आपको ज़रूरत है Adobe, एक png के रूप में बचत करना और चित्र को पावरपॉइंट पर आयात करना

कम सफल परीक्षण # 1 :plt.savefig('filename.png', dpi=300)

यह सामान्य रिज़ॉल्यूशन की तुलना में छवि को थोड़ा अधिक सहेजता है, लेकिन यह प्रकाशन या कुछ प्रस्तुतियों के लिए पर्याप्त नहीं है। 2000 तक के डीपीआई मूल्य का उपयोग करते हुए अभी भी बंद होने पर धुंधली छवियां उत्पन्न होती हैं।

कम सफल परीक्षण # 2 :plt.savefig('filename.pdf')

इसे Microsoft Office Professional Plus 2016 (इसलिए कोई पॉवरपॉइंट) में नहीं खोला जा सकता, Google स्लाइड्स के साथ।

कम सफल परीक्षण # 3 :plt.savefig('filename.svg')

यह पावरपॉइंट या Google स्लाइड में भी नहीं खोला जा सकता है, जैसा कि ऊपर दिया गया है।

कम सफल परीक्षण # 4 :plt.savefig('filename.pdf')

और फिर कमांड लाइन पर png में बदलना:

convert -density 300 filename.pdf filename.png

लेकिन यह तब भी धुँधला होता है जब इसे बंद करके देखा जाता है।

कम सफल परीक्षण # 5 :plt.savefig('filename.pdf')

और GIMP में खोलना, और उच्च गुणवत्ता वाले png के रूप में निर्यात करना (फ़ाइल आकार ~ 100 KB से बढ़ाकर ~ 75 MB)

कम सफल परीक्षण # 6 :plt.savefig('filename.pdf')

और फिर कमांड लाइन पर jpeg में परिवर्तित करना:

pdfimages -j filename.pdf filename

इसने कोई त्रुटि उत्पन्न नहीं की, लेकिन कई मापदंडों के आसपास बदलने के बाद भी उबंटू पर एक आउटपुट का उत्पादन नहीं किया।


1
.pdfमेरे लिए सबसे अच्छी गुणवत्ता थी। बहुत अच्छी तरह से 4k की तरह सभी तरह से बहुत अच्छी गुणवत्ता ज़ूम। कमांड लाइन पर कनवर्ट करने के बजाय, .pdf का स्क्रीनशॉट लेना मेरे लिए काफी अच्छा है और इसे पीएनजी में सहेजना है।
डेविड एरिकसन

2

ग्राफ को बचाने के लिए:

matplotlib.rcParams['savefig.dpi'] = 300

जब आप उपयोग करते हैं तो ग्राफ प्रदर्शित करने के लिए plt.show():

matplotlib.rcParams["figure.dpi"] = 100

बस उन्हें शीर्ष पर जोड़ें


0

अपने () लूप के अंत में , आप plt.show () केsavefig() बजाय फ़ंक्शन का उपयोग कर सकते हैं और अपने आंकड़े का नाम, डीपीआई और प्रारूप सेट कर सकते हैं।

उदाहरण के लिए 1000 डीपीआई और ईपीएस प्रारूप काफी अच्छी गुणवत्ता वाले हैं, और यदि आप फ़ोल्डर में प्रत्येक चित्र को सहेजना चाहते हैं ।/ 'Sample1.eps', 'Sample2.eps' आदि नामों के साथ, आप बस निम्नलिखित कोड जोड़ सकते हैं:

for fname in glob("./*.txt"):
    # Your previous code goes here
    [...]

    plt.savefig("./{}.eps".format(fname), bbox_inches='tight', format='eps', dpi=1000)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.