# Gnuplot-how to find the area under a curve / integrate?

1. Feb 27, 2010

### Dunhausen

Gnuplot--how to find the area under a curve / integrate?

I would assume this is a quite popular undertaking, so how is it normally done?

I just want to know the approximate area under the curve if all the points were joined by straight lines, no need (or desire) for curve fitting.

If I have to use another graphing program to do this then gnuplot becomes pretty pointless. :p

2. Feb 28, 2010

### Rajini

Re: Gnuplot--how to find the area under a curve / integrate?

Hi, As far as i know integration is not possible in gnuplot (i agree gnuplot is an excellent simple plotting and fitting package, especially for fitting it is wonderful with high precession).
But in xmgrace you can integrate a full curve..
The best advice i can give is to write a simple program for integration..so that you can even set the ranges of X-axis values for integration.
good luck

3. Mar 8, 2010

### Dunhausen

Re: Gnuplot--how to find the area under a curve / integrate?

I wound up using Gnuplot.py, which let's you run Gnuplot using python. In hindsight this is easier, anyway.

There are several functions in the scipy package which can perform this type of numeric integration. (I used "trapz")

Then Gnuplot can be called like this:
(posted because so far Gnuplot.py is not very well documented)

Code (Text):
import Gnuplot
gp2 = Gnuplot.Gnuplot(persist=1)  #persist=1 keeps the window open after the program runs
gp2('set data style lines')
gp2('set termoption enhanced')  #so that the fancy symbols below work in the GUI display
gp2('set title "Graph of {/Symbol Y}_{II}"')
gp2('set xlabel "x (meters)"')
gp2('set ylabel "{/Symbol Y}"')

gp3 = Gnuplot.Gnuplot(persist=1)  #create a different object for a different plot
gp3('set data style lines')
gp3('set termoption enhanced')
gp3('set title "Graph of {/Symbol Y}_{III}"')
gp3('set xlabel "x (meters)"')
gp3('set ylabel "{/Symbol Y}"')

#Generate wave function data for the specified energy levels

num_divisions=1000
spacing=L/num_divisions
x2=arange(0,L, spacing)
x3=arange(L,2*L, spacing)

Psi2_0=A[0]*Psi2(x2,L_2[0])
Psi2_1=A[1]*Psi2(x2,L_2[1])
Psi2_2=A[2]*Psi2(x2,L_2[2])

Psi3_0=Psi3(x3,L_3[0])
Psi3_1=Psi3(x3,L_3[1])
Psi3_2=Psi3(x3,L_3[2])

plot2_0=Gnuplot.PlotItems.Data(x2,Psi2_0,title='{/Symbol Y}_{II_0}')
plot2_1=Gnuplot.PlotItems.Data(x2,Psi2_1,title='{/Symbol Y}_{II_1}')
plot2_2=Gnuplot.PlotItems.Data(x2,Psi2_2,title='{/Symbol Y}_{II_2}')

plot3_0=Gnuplot.PlotItems.Data(x3,Psi3_0,title='{/Symbol Y}_{III_0}')
plot3_1=Gnuplot.PlotItems.Data(x3,Psi3_1,title='{/Symbol Y}_{III_1}')
plot3_2=Gnuplot.PlotItems.Data(x3,Psi3_2,title='{/Symbol Y}_{III_2}')

gp2.plot(plot2_0,plot2_1,plot2_2)
gp3.plot(plot3_0,plot3_1,plot3_2)

#note that terminal="postscript enhanced" returns an error, you have set "enhanced" as so
gp2.hardcopy(filename="psi2.ps",terminal="postscript",enhanced=1)
gp3.hardcopy(filename="psi3.ps",terminal="postscript",enhanced=1)

4. Mar 8, 2010

### Rajini

Re: Gnuplot--how to find the area under a curve / integrate?

Hi that is wonderful,
but i dont understand..
Normally in linux i type gnuplot in command..then i work with gnuplot ..[i use only for fitting]..
I curious to know about integration in gnuplot..If you have some time please help..For e.g., I have a lorentzian and want to find the area..
my function:
$$f(x)=\frac{h\Gamma^2}{\Gamma^2+4(x-x_0)^2}$$,
where $$h$$ is height and $$\Gamma$$ is full width at half maximum and $$x_0$$ is peak position. It would be nice if you provide the code with 5 input parameters (peak position, full width, height, left and right limit of peak (left=right), number of data points). It is often time consuming for me to write C codes and finding bugs..
thank you very much

5. Apr 3, 2011