The old-school Unix way of generating graphs from numeric data. It has very verbose documentation, but unfortunately it lacks in practical examples.
By default, gnuplot creates X11 windows and draws the graphs to your XServer. But that's no good for embedding it into a report, so do:
set output "filename.ps" set term postscript color [...] plot [your plot command]
If you use LaTeX, you can get gnuplot to output a LaTeX picture instead of embedding a graphic in your report:
set output "foo.tex" set term latex [...] plot [your plot command]
Note that your latex file should "\usepackage{latexsym}" so that it knows about several shapes that gnuplot outputs (such as \Diamond and \Box). Try "help set term latex" for more info.
The default is to give a function that calculates "y" for various values of "x", but that makes it difficult to get a vertical line. Do
set parametric # vertical line plot 0, t # horizontal plot t, 0 # or just plain old plot 5
set pointsize 2 # plot [xrange] [yrange] function, function, .... # do columns 3,4 and 6, using the first column for x plot [0:2] [0:100] "input" using 1:3 with linespoints title "3rd", \ "input" u 1:4 w lp t "4th", "input" u 1:6 w lp t "6th"
As you see, command names can be shortened, which can make it hard to understand what is happening :)
Say you want to put 2 graphs on a single A4 bit of paper to print it out
set terminal postscript portrait set size 1,1 # The documentation recommends you set to full size first set origin 0,0 set output "output.ps" set multiplot # Enter multiplot mode. Your prompt will become 'multiplot>' set size 1,0.5 set origin 0,0 plot "input" using 1:2 with lines set size 1,0.5 set origin 0,0.5 plot "input" using 1:3 with lines unset multiplot # Exit multiplot mode
set xdata time set timefmt "%H:%M:%S" set xrange ["8:00:00":"18:00:00"]
Timestamps in your data file will now be recognised. Gaps in your time data will show up as gaps in the graph.
Define the following:
invsqrt2pi=1.0/sqrt(2.0*pi) normal(x,mu,sigma)=invsqrt2pi/sigma*exp(-0.5*((x-mu)/sigma)**2)
Now, if you want a normal distribution with mean 13 and SD 1, you can go
plot normal(x,13,1)
set xrange[0:10] set yrange[50:100]
One page links to GnuPlot: