You are here

Homework

Gnuplot Help

Obtaining Gnuplot

For PC : Download gnuplot.

For Mac OS X: First download and install XQuartz. Then install gnuplot for mac os x

Plotting Functions with Gnuplot

Let's try a few examples: To plot the function sin(x)

gnuplot>  plot sin(x)

To plot the functions sin(x) and cos(x) together

gnuplot> plot sin(x), cos(x)

To plot the function y(x)=3*x + 5

gnuplot> plot 3*x + 5

Another way to plot the function y(x)=3*x + 5

gnuplot> y(x) = 3 * x + 5

gnuplot> plot y(x)

To make sure y(x) has been defined use

gnuplot> show functions
User-Defined Functions: y(x) =3*x+5

Plotting Data

To plot a data file called "bignums.txt"

gnuplot> plot "bignums.txt"

Note: the double quotes are required! To plot the function y(x) = 3*x**2 - 5 * x + 2 from x= -3 to x= 6.4

gnuplot> y(x) = 3*x**2 - 5 * x + 2

gnuplot> plot [-3:6.4] y(x)

You can use the show functions command to check that the previous definition of y(x) was overwritten.

To plot a previously-made histogram called "my_histo.txt"

gnuplot> plot "my_histo.txt" with boxes

If you were plotting the file "myfile.txt" between limits with impulses.

gnuplot> plot [-5:14][0:6] "myfile.txt" with impulses

gnuplot> show term

Remember your terminal type!

Making Contour Plots

It is a bit tricky to make gnuplot do contour plots. Your data should be in the form

x1  y1  z1

x2  y2  z2

x3  y3  z3

etc...

with no blank lines. To make a contour plot with 10 levels of an (x y z) dataset called chibig.txt, do the following:

gnuplot> set parametric

gnuplot> set dgrid3d

gnuplot> set contour base

gnuplot> set nosurface

gnuplot> set view 0,0

gnuplot> set cntrparam levels auto 10

If you want more or less than 10 levels, change the number in the preceding line to whatever you want.

To plot the contour plot use

gnuplot> splot "chibig.txt" with lines

note that the command is "splot" (for surface plot), not plain old "plot". We've tested this on all 3 platforms and it works identically, so it should work for you. To print, use the method described below.

If you really care, you can enter "help set" to find out more about all those options you typed in.

There is a problem with the memory management in gnufit for the pc, and you may occasionally get "out of memory for isoline surfaces", or something like that, when making a bunch of contour plots under Windows 3.1. if you get this error quit gnufit and try it again, or switch to DOS (instead of a DOS window under Windows), which seems to do better.

Using gnuplot for fitting

Gnuplot has a built-in fitting routine using the Marquardt-Levenberg algorithm. This is quite fast and robust as fitting routines go. It will perform linear and non-linear fits for most any analytical function. To fit your data to a function y(x) first define the function:

gnuplot> y(x) = a*x**2 + m*x + b

Notice the FORTRAN convention of using double asterisks to achieve exponents. Next give some starting values for the parameters. They must include a decimal point!

gnuplot> a = 1.0

gnuplot> m = 5.0

gnuplot> b = 2.0

If you enter anything like

gnuplot> a = 1 ****** wrong *****

the program will blow up (that is, it will not converge and complain about a "Singular Matrix"). Then the command to fit the function y(x) to a datafile called "pair0.txt" is

gnuplot> fit y(x) "pair0.txt" via a, m, b

followed by lots of output. If you have entered "good" initial guesses for the parameters, then the fit should converge in just a few seconds. The results will appear on the screen and will be appended to a file called "fit.log". When reporting results, make sure you are looking at the correct section of "fit.log", as it can get confusing.

Printing from within gnuplot (to a Postscript file)

gnuplot> set term postscript

gnuplot> set output "some_name.ps"

gnuplot> replot 

The plot will be saved to the file "somename.ps".

gnuplot> set output

To reset the output to the screen use

gnuplot> set term X11

or to vttek, tek40xx, or whatever your terminal type was. To send the PostScript file to the printer use

gnuplot> !lp "some_name.ps"