gnuplot vs Matplotlib [closed] gnuplot vs Matplotlib [closed] python python

gnuplot vs Matplotlib [closed]


  • You can check matplotlib's documentation yourself. I find it quite comprehensive.
  • I have very little experience with gnuplot-py, so I can not say whether it can do all gnuplot can.
  • Matplotlib is written in and designed specifically for Python, so it fits very nicely with Python idioms and such.
  • Matplotlib is a mature project. NASA uses it for some stuff.
  • I've plotted tens of millions of points in Matplotlib, and it still looked beautiful and responded quickly.
  • Beyond the object-oriented way of using Matplotlib is the pylab interface, which makes plotting as easy as it is in MATLAB -- that is, very easy.
  • As for porting from gnuplot-py to matplotlib, I have no idea.


Matplotlib = ease of use, Gnuplot = (slightly better) performance


I know this post is old and answered but I was passing by and wanted to put my two cents. Here is my conclusion: if you have a not-so-big data set, you should use Matplotlib. It's easier and looks better. However, if you really need performance, you could use Gnuplot. I've added some code to test it out on your machine and see for yourself if it makes a real difference (this is not a real performance benchmark but should give a first idea).

The following graph represents the required time (in seconds) to:

  • Plot a random scatter graph
  • Save the graph to a png file

Gnuplot VS Matplotlib

Configuration:

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

I remember the performance gap being much wider when running on an older computer with older versions of the libraries (~30 seconds difference for a large scatter plot).

Moreover, as mentionned in the comments, you can get equivalent quality of plots. But you will have to put more sweat into that to do it with Gnuplot.


Here's the code to generate the graph if you want to give it a try on your machine:

# -*- coding: utf-8 -*-from timeit import default_timer as timerimport matplotlib.pyplot as pltimport Gnuplot, Gnuplot.funcutilsimport numpy as npimport sysimport osdef 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:        passbegin = 2end = 500000step = 10000numberOfPoints = range(begin, end, step)n = len(numberOfPoints)gnuplotTime = []matplotlibTime = []progressBarWidth = 30# Init Gnuplotg = Gnuplot.Gnuplot()g("set terminal png size 640,480")# Init matplotlib to avoid a peak in the beginningplt.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 gsys.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()


matplotlib has pretty good documentation, and seems to be quite stable. The plots it produces are beautiful - "publication quality" for sure. Due to the good documentation and the amount of example code available online, it's easy to learn and use, and I don't think you'll have much trouble translating gnuplot code to it. After all, matplotlib is being used by scientists to plot data and prepare reports - so it includes everything one needs.

One marked advantage of matplotlib is that you can integrate it with Python GUIs (wxPython and PyQt, at least) and create GUI application with nice plots.