#!/bin/bash
#
# Use gnuplot to plot the data in <data_file> (by default stdin).
# If "-v <vcol_start>" is specified, then the columns starting with
# from vcol_start contain variation values for the data in columns 2, 3, ...
# +/- variation is plotted as a band around the plot line.
#
usage_args="[-geometry WxH+x+y] [-t title] [-x xlabel] [-y ylabel] [-w width] [-h height] [-X xrange] [-Y yrange] [-k keyopts] [-lt ltfile] [-g] [-u] [-v vcol_start] [data_file]"
geom=
width=350
height=200
title=
xlabel=
ylabel=
output_cmd=
termopt_cmd=
keyopts="top center"
ltfile=
vcol_start=
while [ $# -gt 0 ]
do
case "$1" in
-geometry) geom="-geometry $2"; shift;;
-t) title="$2"; shift;;
-x) xlabel="$2"; shift;;
-y) ylabel="$2"; shift;;
-w) width="$2"; shift;;
-h) height="$2"; shift;;
-Y) yrange="$2"; shift;;
-X) xrange="$2"; shift;;
-k) keyopts="$2"; shift;;
-lt) ltfile="$2"; shift;;
-g) output_cmd="set terminal png; set output \"$title.png\"";;
-u) termopt_cmd="set termoption noenhanced";;
-v) vcol_start="$2"; shift;;
--) shift; break;;
-*)
echo >&2 \
"usage: $0 $usage_args"
exit 1;;
*) break;;
esac
shift
done
# if no data_file specified, copy stdin to a tmpfile and read it
#
if [ $# -eq 0 ]; then
data_file=/tmp/$$
cat > $data_file
if [ "$title" == "" ]
then
title="<stdin>"
fi
elif [ $# -eq 1 ]; then
data_file=$1; shift
else
echo >&2 "usage: $0 $usage_args"
exit 1
fi
# Verify that $data_file is a regular file
#
if [ -d $data_file ]; then
echo >&2 "$data_file is a directory, doofus."
exit 1
elif [ ! -f $data_file ]; then
echo >&2 "No such file: $data_file"
exit 1
fi
if [ "$title" == "" ]
then
title=$data_file
fi
if [ "$xrange" == "" ]
then
xrange_cmd=""
else
xrange_cmd="set xrange $xrange"
fi
if [ "$yrange" == "" ]
then
yrange_cmd=""
else
yrange_cmd="set yrange $yrange"
fi
num_columns=`awk 'END {print NF;}' < $data_file`
if [ "$vcol_start" != "" ]
then
((data_columns = $vcol_start - 1 ))
else
((data_columns = $num_columns ))
fi
declare -i i
plots=
for (( i=2; i <= $data_columns; i++ ))
do
if [ "$vcol_start" != "" ]
then
(( v = $vcol_start + $i - 2 ))
plots+="'$data_file' using 1:(\$$i-\$$v):(\$$i+\$$v) with filledcurves notitle lt $((i-1)),"
fi
plots+="'$data_file' using 1:$i title column($i) with lines lt $((i-1))"
if (( i != $data_columns))
then
plots+=","
fi
done
#echo "PLOTS *** " $plots
#set datafile separator "\t"
#set terminal x11 size $width,$height background rgb 'white'
#set terminal qt size $width,$height
gnuplot -p $geom $ltfile - <<__END__
reset
set terminal qt size $width,$height
set title "$title"
set xlabel "$xlabel"
set ylabel "$ylabel"
$xrange_cmd
$yrange_cmd
set key $keyopts
set style fill transparent solid 0.2 noborder
$output_cmd
$termopt_cmd
plot \
$plots
__END__