GNUPlot is a free and very neat little graphing tool. Upon installing it and running gnuplot you’ll be presented with a flashing command line prompt gnuplot>_ at which point you’ll be asking yourself “now what?”
gnuplot either plots data using plot or plots 3D surfaces using splot.
In this example, I’ll plot a surface plot (3D splot) of weekday (x), hour (y), number of jobs running (z).
gnuplot likes to be fed its data in text column format, separated with spaces or tabs but not commas e.g.
#day #hour #jobs
1 1 5
1 2 5
1 3 5
1 4 5
1 5 5
1 6 5
1 7 5
1 8 5
1 9 5
1 10 5
To create a surface plot of this data (my sample data used has values for all 24 hours in all 7 days), simply type
splot ‘path_to_data.dat’ to point to your text file containing your columns of numbers.
The results will be something like this. Good, but not quite there yet.
Some extra commands in the gnuplot command line window will improve the visual representation of the data, giving us the surface plot we’re ultimately after.
set dgrid3d
set grid
set view 50
set style data lines
set contour base
set hidden3d trianglepattern 7
set autoscale
Finally, use the command replot to update the graph. The results are now much more usable, with contour lines on the base of the 3D graph to further highlight the “hot spots”, i.e. the hours of what day the most jobs are running (in my example).
There’s much more fun to be had tweaking GNUPlot but I’ll leave that up to you and your imagination. It’s worth finally mentioning that the commands entered into gnuplot can be scripted and saved as a .plt file to compliment your .dat data file. Then, to plot the surface maps again, you just need to load the script using…
load ‘path_to_script.plt’
Remember, the final line in your script should be
splot ‘path_to_data.dat’
so that the graph is actually generated, with all the options preceeding it. e.g.
#My GNUPlot surface map script surf-map.plt
set dgrid3d
set grid
set view 50
set style data lines
set contour base
set hidden3d trianglepattern 7
set autoscale
splot ‘data.dat’
How you generate your actual data to be plotted is up to you. A scheduled task/cron job which collects the data and appends it to the data.dat file is generally run as a separate shell script, e.g.
#!/bin/sh
#Insert newline into data.dat
HOURVAL=`date | awk {‘print $4’} | cut -d: -f1`
DAYVAL=`date | awk {‘print $1’}
RUNNINGGROUPSVAL=`ps -ef | grep savegrp | wc -1`echo “${HOURVAL} ${DAYVAL} ${RUNNINGGROUPSVAL}” >> ~/data.dat
and the graphs generated at will using gnuplot.
Depending on the shapes generated by the surface map, it’s a nice touch that GNUPlot allows you to left-click on the graph and drag it around in 3 dimensions to achieve the best possible viewing angle, prior to saving the .png file, conveniently colouring the underside of the surface a different colour to the upper, visible side of the surface.