gnuplot বনাম Matplotlib


84

আমি gnuplot-py ব্যবহার করে টমক্যাট লগগুলি গ্রাফিংয়ের একটি প্রকল্প শুরু করেছি , বিশেষভাবে মেমরি বরাদ্দ এবং আবর্জনা সংগ্রহের সাথে নির্দিষ্ট অনুরোধগুলির সাথে সম্পর্কিত। পাইথন গ্রাফিংয়ের জন্য gnuplot-py বনাম Matplotlib এর সম্মিলিত জ্ঞান কী । আমি শুনিনি যে আরও ভাল গ্রাফিং গ্রন্থাগার আছে?

আমার সাধারণ বিবেচনাগুলি হ'ল:

  • যখন gnuplot এর প্রচুর পরিমাণে ডকুমেন্টেশন রয়েছে, gnuplot-py নেই। ম্যাটপ্ল্লিটিবের জন্য ডকুমেন্টেশন সম্প্রদায়টি কতটা ভাল?
  • Gnuplot করতে পারে এমন কিছু জিনিস আছে তবে gnuplot-py পারে না?
  • ম্যাথপ্লটলিবের কী পাইথন সমর্থন রয়েছে?
  • এখানে কি বড় শো বন্ধ হয়ে গেছে? বিরক্তি?
  • বর্তমানে gnuplot 100,000 এর পয়েন্ট গ্রাফিক করছে, আমি এটি লক্ষ লক্ষ পর্যন্ত স্কেলিংয়ের পরিকল্পনা করছি। আমার কি সমস্যা আশা করা উচিত? ম্যাটপ্লটলিব এটি কতটা ভাল পরিচালনা করে?
  • ব্যবহারের সহজতা, ম্যানপ্ল্লট বনাম ম্যাটপ্ল্লিটিবের টার্নআরআন্ড টাইম?
  • বিদ্যমান gnuplot-py কোডটি ম্যাটপ্ল্লোব-এ পোর্ট করা কত সহজ হবে?

আপনি কিভাবে এই কাজের কাছে যেতে চান?


আরেকটি gnuplot মোড়কের হয় gplot.py যা কাজ করে jupyter
ফ্রিডরিচ

উত্তর:


51
  • আপনি ম্যাটপ্ল্লিটিবের ডকুমেন্টেশন নিজেই পরীক্ষা করতে পারেন । আমি এটি বেশ বিস্তৃত মনে।
  • Gnuplot-py এর সাথে আমার খুব কম অভিজ্ঞতা আছে, তাই এটি সমস্ত gnuplot পারে কিনা তা আমি বলতে পারি না।
  • ম্যাটপ্লটলিবটি পাইথনের জন্য রচিত এবং বিশেষভাবে ডিজাইন করা হয়েছে, তাই এটি পাইথন প্রতিমাগুলির এবং এটির মতো খুব সুন্দরভাবে ফিট করে।
  • ম্যাটপ্লটলিব একটি পরিণত প্রকল্প। নাসা এটি কিছু স্টাফের জন্য ব্যবহার করে।
  • আমি ম্যাটপ্ল্লিটিব লক্ষ লক্ষ পয়েন্ট প্লট করেছি এবং এটি এখনও সুন্দর দেখাচ্ছে এবং দ্রুত প্রতিক্রিয়া দেখালেন।
  • ম্যাটপ্লটলিব ব্যবহারের অবজেক্ট-ওরিয়েন্টেড উপায়ের বাইরে পাইলব ইন্টারফেস, যা প্ল্যাটফর্মটি ম্যাটল্যাব-তে যত সহজ করে তোলে - এটি খুব সহজ।
  • Gnuplot-py থেকে matplotlib পোর্ট করার ক্ষেত্রে, আমার কোনও ধারণা নেই।

4
জিনুপ্লটের জন্য আমি কেবলমাত্র এটিই বলতে পারি যে ম্যাটপ্ল্লোলিবের 3 ডি প্লট করার ক্ষমতা নেই। তদ্ব্যতীত, আমি উভয়ই এখন পর্যন্ত পছন্দসই ম্যাটপ্লটলিব ব্যবহার করেছি।
পদার্থবিজ্ঞান

4
@ ভিজিএম :৪: বর্তমান এসভিএন 3 ডি আবার যুক্ত করেছে i আমি নিজে এটির কোনও পরীক্ষাই করি নি, সুতরাং এটি কত সুন্দর তা আমি বলতে পারি না। 3 ডি প্লট করার জন্য আমি মায়াভি 2 ব্যবহার করি: কোড . enthought.com/projects/mayavi
অটলপেক্টিক

10
matplotlib এখন একটি 3 ডি
কিট

9
"ম্যাটপ্লটলিব পাইথনের জন্য রচিত এবং বিশেষভাবে ডিজাইন করেছেন" - আমাকে একমত হতে হবে না। ম্যাটপ্লটলিব এপিআই 'টিপিকাল পাইথন' থেকে এতটা দূরে যে এটি ব্যথা করে। কিছু যদি এটি মাতলাব শব্দার্থবিজ্ঞানের অনুকরণ করে।
ওলে

6
পক্ষপাতদুষ্ট। আপনার "gnuplot-py এর সাথে খুব কম অভিজ্ঞতা ছিল"। প্রদত্ত তথ্যগুলি ম্যাটপ্লোটিলিব সম্পর্কিত। ম্যাটপ্লোটিলিব সম্পর্কে মত প্রকাশও খুব সাবজেক্টিভ।
স্কুয়েড

46

ম্যাটপ্ললিব = ব্যবহারের সহজতা, জ্ঞানপ্লট = (কিছুটা ভাল) পারফরম্যান্স


আমি জানি এই পোস্টটি পুরানো এবং উত্তর হয়েছে তবে আমি পাশ দিয়ে যাচ্ছিলাম এবং আমার দুটি সেন্ট রাখতে চাইছিলাম। এখানে আমার উপসংহারটি দেওয়া হয়েছে: যদি আপনার কাছে অতি-বৃহত্তর ডেটা সেট থাকে তবে আপনার ম্যাটপ্লটলিব ব্যবহার করা উচিত। এটি সহজ এবং আরও ভাল দেখাচ্ছে। তবে, আপনার যদি সত্যিই পারফরম্যান্সের প্রয়োজন হয় তবে আপনি জ্ঞানপ্লট ব্যবহার করতে পারেন। আমি আপনার মেশিনে এটি পরীক্ষা করে দেখার জন্য কিছু কোড যুক্ত করেছি এবং এটি যদি সত্যিকারের পার্থক্যের সৃষ্টি করে তবে নিজেই দেখুন (এটি বাস্তব পারফরম্যান্সের মানদণ্ড নয় তবে একটি প্রথম ধারণা দেওয়া উচিত)।

নিম্নলিখিত গ্রাফটি প্রয়োজনীয় সময়কে (সেকেন্ডে) প্রতিনিধিত্ব করে:

  • একটি এলোমেলো স্ক্যাটার গ্রাফ প্লট করুন
  • গ্রাফটি একটি পিএনজি ফাইলে সংরক্ষণ করুন

জ্নুপ্লট ভিএস ম্যাটপ্ল্লিটিব

কনফিগারেশন:

  • gnuplot: 5.2.2
  • gnuplot-py: 1.8
  • ম্যাটপ্লোটলিব: ২.১.২

আমি মনে করি গ্রন্থাগারগুলির পুরানো সংস্করণ (একটি বড় স্ক্যাটার প্লটের জন্য 30 ডলার সেকেন্ডের পার্থক্য) সহ কোনও পুরানো কম্পিউটারে চলাকালীন পারফরম্যান্সের ব্যবধানটি আরও প্রশস্ত being

তদতিরিক্ত, মন্তব্যে উল্লিখিত হিসাবে, আপনি প্লটের সমমানের মান পেতে পারেন। তবে জ্ঞানুপ্লটের সাথে এটি করতে আপনাকে আরও ঘামতে হবে।


আপনি যদি নিজের মেশিনে চেষ্টা করে দেখতে চান তবে গ্রাফটি তৈরি করতে কোডটি এখানে রয়েছে :

# -*- 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কোডটি অনুবাদ করতে আপনার খুব বেশি সমস্যা হবে। সর্বোপরি, ম্যাটপ্ল্লোলিব বিজ্ঞানীরা ডেটা প্লট করতে এবং প্রতিবেদন তৈরি করতে ব্যবহার করছেন - সুতরাং এটির প্রয়োজনীয় সমস্ত কিছু অন্তর্ভুক্ত রয়েছে।

ম্যাটপ্ল্লোলিবের একটি চিহ্নিত সুবিধা হ'ল আপনি এটিকে পাইথন জিইউআই ( ডাব্লুএক্সপিথন এবং পাইকিট , কমপক্ষে) এর সাথে সংহত করতে পারেন এবং সুন্দর প্লটের সাথে জিইউআই অ্যাপ্লিকেশন তৈরি করতে পারেন।


16

দীর্ঘকাল জিএনইউপ্লট (আমার নিজের পাইথন র‍্যাপার সহ) ব্যবহার করার পরে (এবং সত্যই 80s -র মতো দেখায় না এমন আউটপুট পছন্দ হচ্ছে না), আমি কেবল ম্যাটপ্ল্লিটিবের দিকে নজর দিতে শুরু করেছি। আমি অবশ্যই বলব যে এটি আমার খুব পছন্দ হয়েছে, আউটপুটটি দেখতে বেশ সুন্দর দেখাচ্ছে এবং ডক্সটি উচ্চমানের এবং বিস্তৃত (যদিও এটি জিএনইউপ্লটকেও দেয়)। ম্যাটপ্ল্লিটিব ডক্সে আমি যে বিষয়গুলি যুগে যুগে ব্যয় করেছি তা হ'ল স্ক্রিনের চেয়ে কোনও চিত্র ফাইলে কীভাবে লেখা যায়! ভাগ্যক্রমে এই পৃষ্ঠাটি এটি বেশ ভালভাবে ব্যাখ্যা করেছে: http://www.dalkesciographic.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html


10
আমার gnuplot এর 80-এর- দেখায় আউটপুট সম্পর্কে একমত হতে হবে না (যা বানান gnuplot এবং GPUplot নয় )। আপনি যদি কিছু কাস্টম শৈলী ব্যবহার করেন (আপনার কেবলমাত্র সেগুলি একবারেই সংজ্ঞায়িত করতে হবে), আপনি সুন্দর চক্রান্ত দিয়ে শেষ করবেন। অন্যরা কীভাবে এই আশ্চর্যজনক সফ্টওয়্যারটি ( রেফারেন্স ) ব্যবহার করছে তা পরীক্ষা করে দেখুন ।
21

8

আমি উভয়ের সাথেই খেলেছি এবং পাইথন সংহতকরণ, বিকল্পগুলি এবং গ্রাফ / প্লটের গুণমানের ক্ষেত্রে আমি ম্যাটপ্ল্লিটবকে আরও ভালভাবে পছন্দ করি।


6

পারফরম্যান্স এবং প্রচুর পয়েন্টের প্লট করার বিষয়ে: আমি এটি একটি টেক্সট ফাইল থেকে লোড করা 500.000 পয়েন্টের স্ক্রেটারপ্লটের জন্য তুলনা করেছি এবং gnuplot * এবং matplotlib ব্যবহার করে একটি পিএনজিতে সংরক্ষণ করেছি।

500.000 points scatterplot
gnuplot:      5.171 s
matplotlib: 230.693 s

আমি এটি একবারে চালিয়েছি এবং ফলাফলগুলি অভিন্ন বলে মনে হচ্ছে না, তবে আমি মনে করি ধারণাটি পরিষ্কার: gnuplot পারফরম্যান্সে জিতেছে।

* আমি gnuplot সরাসরি ব্যবহার করেছি যেহেতু gnuplotpy ডেমো আমার জন্য বাক্সের বাইরে কাজ করে না। ম্যাথপ্লটলিব পাইথন ইন্টিগ্রেশনে জয়ী।


4

Gnuplot কী করতে পারে Gnuplot-Py খুব করতে পারে। কারণ Gnuplot পাইপ (pgnuplot) দ্বারা চালিত হতে পারে। জ্ঞানপ্লট-পাই এটির জন্য কেবল একটি পাতলা স্তর। সুতরাং আপনার এটি নিয়ে চিন্তা করার দরকার নেই।

কেন আমি জিনুপ্লটকে অনেক বেশি আউটপুট ফর্ম্যাট (পিডিএফ, পিএস এবং ল্যাটেক্স) পছন্দ করি, যা কাগজপত্রগুলিতে খুব দরকারী এবং ডিফল্ট আউটপুটটি আরও বৈজ্ঞানিক-স্টাইল দেখায় :)


3

এর কিছু প্রো এর gnuplot(আমি বছরের পর বছর পরেও ম্যাটলিবপ্লট পছন্দ করি না):

  • কেবল প্লট ফাংশন দিয়ে sin(x)(অ্যারেগুলি সংজ্ঞায়িত করার এবং ব্যাপ্তিগুলি সম্পর্কে চিন্তা করার প্রয়োজন নেই)
  • প্লট ফাইলগুলি সরাসরি (কোনও অ্যারেতে আমদানির দরকার নেই)
  • প্লট পাইপ-ডেটা (ফ্লাইতে শেল কমান্ড কার্যকর করুন "<echo 1 2 3")
  • ক্লিপবোর্ড বোতামে অনুলিপি করুন
  • দ্রুত চক্রান্ত
  • দ্রুত কোডিং

পাইপথন এবং জুপিটারের জন্য gplot.py হ'ল আরেকটি র‍্যাপার জ্নুপ্লট মোড়ক।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.