Author: Ben Schneider
Gnuplot (http://www.gnuplot.info)
Using pip
pip install PyGnuplot
Using conda
conda install -c benschneider pygnuplot 98A5 pre>pip install --upgrade PyGnuplotfrom PyGnuplot import gp figure1 = gp() # Create a new figure handle figure2 = gp(r"C:\Program Files\gnuplot\bin\gnuplot.exe") # Can also specify which gnuplot to use figure1.a("plot sin(x)") figure2.a("plot cos(x)") pi = figure.a("print pi")c(command)
pipe a command to gnuplot as if in gnuplot command promt
c('plot sin(x)')save(data, filename='tmp.dat')
save arrays into file (filename = 'tmp.dat') easily read by Gnuplot
s([X,Y,Z]) # creates tmp.datc('plot "tmp.dat" u 1:2')a(command='', vtype=str, timeout=0.05)
asks gnuplot: it sends a command to gnuplot and returns its response This is paricularly handy when using gnuplots fitting features vtype can be used to change the return format timeout is the time to wait for a responsea('print pi') # returns the value of pia('print pi; print pi') # returns 2 times the value of pir(vtype=str, timeout=0.05)
reads the gnuplot return buffer until its emptyplot(data, filename='tmp.dat')
Plot some data. Sends plot instructions and the data to Gnuplotplot([x,y])plot_b(data, v1='d', v2='%double')
Similar to plot: Sends plot instructions and the data to Gnuplot However it sends them in binary format, which can be beneficial when the dealing with larger quanities of numbersp(filename='tmp.ps', width=14, height=9, fontsize=12, term='x11')
Create postscript file (overwrites existing)
p('myfile.ps')pdf(filename='tmp.pdf', width=14, height=9, fontsize=12, term='x11')
Create a pdf file (overwrites existing)
pdf('myfile.pdf')quit()
Closes windows,then gnuplot, then the pipeThis script will use the same default terminal that gnuplot used (it reads the GPVAL_TERM value when gnuplot starts up) it can still be modified by the 'default_term' variable:from PyGnuplot import gp fig1 = gp() fig1.default_term = 'wxt'fit2d(data, func='y(x)=a + b*x', via='a,b', limit=1e-9)
Quickly Fit a simple 2-D data set and return the fitting results. This uses the new ask function "a()" Here we gather the fitting info from gnuplotand:
fit(self, data, func='y(x)=a + b*x', via='a,b', limit=1e-9, filename='tmp.dat', wait=1)
Allows for sligtly more complex fitting, filename: stores data first into a temporary file default: tmp.dat wait: define a waiting time in sec for gnuplot to finish its fitting default: 1secimport numpy as np f1 = gp() x = np.linspace(0, 20, 1001) yn = np.random.randn(1001)/10 y = np.sin(x) data = [x, y+yn] func = 'y(x) = a + b*cos(x + c)' # define a fitting function here. (a, b, c), report = f1.fit2d(data, func, via='a,b,c', limit=1e-9) # sending in the data the function used to fit and the variables that are to be found. f1.save(data, "tmp.dat") f1.a('plot "tmp.dat" w lp') f1.a('replot y(x)')
- 1 Example code
from PyGnuplot import gp
import numpy as np
X = np.arange(10)
Y = np.sin(X/(2*np.pi))
Z = Y**2.0
fig1 = gp()
fig1.save([X,Y,Z])
fig1.c('plot "tmp.dat" u 1:2 w lp)
fig1.c('replot "tmp.dat" u 1:3' w lp)
fig1.p('myfigure.ps')
- 2 Example file
python example.py