gnuplot बनाम Matplotlib


84

मैंने एक प्रोजेक्ट पर शुरू किया है जो टॉमकोट लॉग को gnuplot-py का उपयोग करते हुए , विशेष रूप से मेमोरी आवंटन और कचरा संग्रह के साथ विशेष अनुरोधों को सहसंबंधित करता है। अजगर ग्राफिंग के लिए gnuplot-py बनाम Matplotlib पर सामूहिक ज्ञान क्या है । वहाँ बेहतर रेखांकन पुस्तकालयों मैं वहाँ के बारे में नहीं सुना है?

मेरे सामान्य विचार हैं:

  • जबकि gnuplot में बड़ी मात्रा में प्रलेखन हैं, gnuplot-py नहीं। Matplotlib के लिए प्रलेखन समुदाय कितना अच्छा है?
  • वहाँ चीजें हैं जो gnuplot कर सकते हैं, लेकिन gnuplot-py नहीं कर सकते हैं?
  • क्या Matplotlib में बेहतर पायथन समर्थन है?
  • वहाँ या तो में बड़े शो रोक कीड़े हैं? खीज?
  • वर्तमान में gnuplot 100,000 अंकों की रेखांकन कर रहा है, मैं इसे लाखों तक स्केल करने की योजना बना रहा हूं। क्या मुझे समस्याओं की उम्मीद करनी चाहिए? माटप्लोटलिब इसे कितनी अच्छी तरह से संभालता है?
  • उपयोग में आसानी, Gnuplot बनाम Matplotlib के लिए टर्नअराउंड समय?
  • मौजूदा gnuplot-py कोड को Matplotlib में पोर्ट करना कितना आसान होगा?

आप इस कार्य को कैसे करेंगे?


एक और gnuplot आवरण है gplot.py जो भी काम करता है jupyter
फ्रेडरिक

जवाबों:


51
  • आप खुद matplotlib के दस्तावेज देख सकते हैं । मुझे यह काफी व्यापक लगता है।
  • मुझे gnuplot-py के साथ बहुत कम अनुभव है, इसलिए मैं यह नहीं कह सकता कि यह सभी gnuplot कर सकता है या नहीं।
  • Matplotlib को पायथन के लिए विशेष रूप से लिखा और डिज़ाइन किया गया है, इसलिए यह पायथन मुहावरों और इस तरह से बहुत अच्छी तरह से फिट बैठता है।
  • माटप्लोटलिब एक परिपक्व परियोजना है। नासा कुछ सामान के लिए इसका इस्तेमाल करता है।
  • मैंने Matplotlib में दसियों लाख अंक दिए हैं, और यह अभी भी सुंदर लग रहा है और जल्दी से जवाब दिया है।
  • Matplotlib का उपयोग करने के ऑब्जेक्ट-ओरिएंटेड तरीके से परे पाइलैब इंटरफ़ेस है, जो कि MATLAB में जितना आसान है, उतनी ही आसान साजिश रचता है।
  • Gnuplot-py से matplotlib में पोर्ट करने के लिए, मुझे कोई पता नहीं है।

3
केवल प्लस मैं gnuplot के लिए कह सकता हूं कि matplotlib में 3 डी प्लॉटिंग क्षमताएं नहीं हैं। इसके अलावा, मैंने अब तक दोनों को पसंद किया है matplotlib।
भौतिक विज्ञान

1
@ vgm64: वर्तमान एसवीएन ने 3 डी को वापस जोड़ा है। मैंने खुद इसका कोई परीक्षण नहीं किया है, इसलिए मैं यह नहीं कह सकता कि यह कितना अच्छा है। 3D प्लॉटिंग के लिए मैं mayavi2 का उपयोग करता हूं: code.enthought.com/projects/mayavi
ऑटोप्‍लेक्टिक

10
matplotlib
किट

9
"माटप्लोटलिब को पायथन के लिए विशेष रूप से लिखा और डिजाइन किया गया है" - मुझे असहमत होना है। मेटप्लोटलिब एपीआई 'ठेठ अजगर' से इतनी दूर है कि यह दर्द होता है। कुछ भी अगर यह matlab शब्दार्थ की नकल करता है।
ओले

6
झुका हुआ। आपको "gnuplot-py के साथ बहुत कम अनुभव" था। दी गई जानकारी सभी matplotlib के बारे में है। Matplotlib के बारे में अभिव्यक्ति भी व्यक्तिपरक है।
स्क्वीड

46

माटप्लोटलिब = उपयोग में आसानी, Gnuplot = (थोड़ा बेहतर) प्रदर्शन


मुझे पता है कि यह पोस्ट पुरानी है और इसका उत्तर दिया गया है लेकिन मैं इससे गुजर रहा था और अपने दो सेंट लगाना चाहता था। यहाँ मेरा निष्कर्ष है: यदि आपके पास एक बड़ा डेटा सेट नहीं है, तो आपको Matplotlib का उपयोग करना चाहिए। यह आसान है और बेहतर दिखता है। हालाँकि, यदि आपको वास्तव में प्रदर्शन की आवश्यकता है , तो आप Gnuplot का उपयोग कर सकते हैं। मैंने आपकी मशीन पर इसका परीक्षण करने के लिए कुछ कोड जोड़ा है और अगर यह एक वास्तविक अंतर है (यह एक वास्तविक प्रदर्शन बेंचमार्क नहीं है, लेकिन पहले विचार देना चाहिए)।

निम्नलिखित ग्राफ आवश्यक समय (सेकंड में) का प्रतिनिधित्व करता है:

  • एक यादृच्छिक तितर बितर ग्राफ प्लॉट करें
  • ग्राफ़ को png फ़ाइल में सहेजें

Gnuplot VS Matplotlib

विन्यास:

  • gnuplot: 5.2.2
  • gnuplot-py: 1.8
  • matplotlib: 2.1.2

मुझे याद है कि लाइब्रेरी के पुराने संस्करणों के साथ पुराने कंप्यूटर पर चलने पर प्रदर्शन का अंतर बहुत व्यापक होता है (एक बड़े स्कैटर प्लॉट के लिए ~ 30 सेकंड का अंतर)।

इसके अलावा, जैसा कि टिप्पणियों में बताया गया है, आप भूखंडों के बराबर गुणवत्ता प्राप्त कर सकते हैं। लेकिन आपको इसे Gnuplot के साथ करने के लिए अधिक पसीना डालना होगा।


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

# -*- coding: utf-8 -*-

from timeit import default_timer as timer
import matplotlib.pyplot as plt
import Gnuplot, Gnuplot.funcutils
import numpy as np
import sys
import os

def mPlotAndSave(x, y):
    plt.scatter(x, y)
    plt.savefig('mtmp.png')
    plt.clf()

def gPlotAndSave(data, g):
    g("set output 'gtmp.png'")
    g.plot(data)
    g("clear")

def cleanup():
    try:
        os.remove('gtmp.png')
    except OSError:
        pass
    try:
        os.remove('mtmp.png')
    except OSError:
        pass

begin = 2
end = 500000
step = 10000
numberOfPoints = range(begin, end, step)
n = len(numberOfPoints)
gnuplotTime = []
matplotlibTime = []
progressBarWidth = 30

# Init Gnuplot
g = Gnuplot.Gnuplot()
g("set terminal png size 640,480")

# Init matplotlib to avoid a peak in the beginning
plt.clf()

for idx, val in enumerate(numberOfPoints):
    # Print a nice progress bar (crucial)
    sys.stdout.write('\r')
    progress = (idx+1)*progressBarWidth/n
    bar = "▕" + "▇"*progress + "▁"*(progressBarWidth-progress) + "▏" + str(idx) + "/" + str(n-1)
    sys.stdout.write(bar)
    sys.stdout.flush()

    # Generate random data
    x = np.random.randint(sys.maxint, size=val)  
    y = np.random.randint(sys.maxint, size=val)
    gdata = zip(x,y)

    # Generate string call to a matplotlib plot and save, call it and save execution time
    start = timer()
    mPlotAndSave(x, y)
    end = timer()
    matplotlibTime.append(end - start)

    # Generate string call to a gnuplot plot and save, call it and save execution time
    start = timer()
    gPlotAndSave(gdata, g)
    end = timer()
    gnuplotTime.append(end - start)

    # Clean up the files
    cleanup()

del g
sys.stdout.write('\n')
plt.plot(numberOfPoints, gnuplotTime, label="gnuplot")
plt.plot(numberOfPoints, matplotlibTime, label="matplotlib")
plt.legend(loc='upper right')
plt.xlabel('Number of points in the scatter graph')
plt.ylabel('Execution time (s)')
plt.savefig('execution.png')
plt.show()

7
इसके अलावा, मुझे यह जोड़ना होगा कि प्लॉट की गुणवत्ता के मामले में, वे बराबर हैं यदि कोई व्यक्ति डिफ़ॉल्ट शैलियों के साथ नहीं जाता है। इसके अलावा, अजगर को चलाने के बिना gnuplot को आसानी से बुलाया जा सकता है , इसलिए यह भाषा स्वतंत्र है!
एटकोल्ड

23

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

Matplotlib का एक चिह्नित लाभ यह है कि आप इसे Python GUIs ( wxPython और PyQt , कम से कम) के साथ एकीकृत कर सकते हैं और अच्छे भूखंडों के साथ GUI एप्लिकेशन बना सकते हैं।


16

लंबे समय तक GNUplot (अपने पायथन रैपर के साथ) का उपयोग करने के बाद (और वास्तव में 80 के दशक के दिखने वाले आउटपुट को पसंद नहीं किया गया), मैंने सिर्फ matplotlib पर एक नज़र रखना शुरू किया। मुझे कहना चाहिए कि मुझे यह बहुत पसंद है, आउटपुट वास्तव में अच्छा लगता है और डॉक्स उच्च गुणवत्ता और व्यापक हैं (हालांकि यह भी GNUplot के लिए जाता है)। एक बात जो मैंने मैटलपोटलिब डॉक्स में देखने के लिए उम्र बिताई है वह यह है कि स्क्रीन के बजाय छवि फ़ाइल में कैसे लिखा जाए! सौभाग्य से यह पृष्ठ इसे बहुत अच्छी तरह से समझाता है: http://www.dalkescientific.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html


10
मुझे gnuplot के 80 के दशक के दिखने वाले आउटपुट के बारे में असहमत होना है (जो कि gnuplot वर्तनी है और GPUpl ) नहीं है । यदि आप कुछ कस्टम शैलियों का उपयोग करते हैं (आपको उन्हें केवल एक बार परिभाषित करना है), तो आप सुंदर साजिश के साथ समाप्त होते हैं। बस यह देखें कि अन्य लोग सॉफ़्टवेयर ( संदर्भ ) के इस अद्भुत टुकड़े का उपयोग कैसे कर रहे हैं ।
Atcold

8

मैंने दोनों के साथ खेला है, और मैं मैथ्लोटलिब को पाइथन एकीकरण, विकल्प और ग्राफ़ / प्लॉट की गुणवत्ता के मामले में बहुत बेहतर लगता हूं।


6

प्रदर्शन के बारे में और अंकों की एक बड़ी संख्या की साजिश रचने के लिए: मैंने इसकी तुलना एक टेक्स्ट फ़ाइल से लोड किए गए 500.000 बिंदुओं के स्कैप्लेटोट के लिए की है और एक png में सहेजा है, gnuplot * और matplotlib का उपयोग करके।

500.000 points scatterplot
gnuplot:      5.171 s
matplotlib: 230.693 s

मैंने इसे केवल एक बार चलाया और परिणाम समान नहीं दिखते हैं, लेकिन मुझे लगता है कि विचार स्पष्ट है: प्रदर्शन पर gnuplot जीतता है।

* मैंने सीधे gnuplot का उपयोग किया है क्योंकि gnuplotpy डेमो मेरे लिए आउट-ऑफ-बॉक्स काम नहीं करता है। Matplotlib पायथन एकीकरण में जीतता है।


4

Gnuplot क्या कर सकता है Gnuplot-Py भी कर सकता है। क्योंकि Gnuplot को पाइप (pgnuplot) द्वारा संचालित किया जा सकता है। Gnuplot-Py इसके लिए सिर्फ एक पतली परत है। तो आपको इसके बारे में चिंता करने की ज़रूरत नहीं है।

क्यों मैं gnuplot पसंद करते हैं शायद कई आउटपुट स्वरूप (PDF, PS और LaTex), जो कागजात में बहुत उपयोगी है, और डिफ़ॉल्ट आउटपुट अधिक वैज्ञानिक-शैली :)


3

कुछ प्रो gnuplot(मैं अभी भी उपयोग के वर्षों के बाद matlibplot पसंद नहीं है):

  • प्लॉट फ़ंक्शन के साथ बस sin(x)(सरणियों को परिभाषित करने और सीमाओं के बारे में सोचने की आवश्यकता नहीं है)
  • प्लॉट फ़ाइलें सीधे (कोई सरणी में आयात करने की आवश्यकता नहीं)
  • प्लॉट पाइप-डेटा (फ्लाई पर शेल कमांड निष्पादित करें "<echo 1 2 3")
  • कॉपी-टू-क्लिपबोर्ड बटन
  • तेजी से साजिश रचने
  • तेजी से कोडिंग

python और jupyter के लिए gplot.py एक अन्य आवरण gnuplot आवरण है।

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