Mercurial > ~darius > hgwebdir.cgi > wh1080
diff plots/plot5 @ 0:9dab44dcb331
Initial commit of Greg's code from http://www.lemis.com/grog/tmp/wh1080.tar.gz
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Tue, 09 Feb 2010 13:44:25 +1030 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plots/plot5 Tue Feb 09 13:44:25 2010 +1030 @@ -0,0 +1,106 @@ +#!/usr/local/bin/bash +# +# $Id: plot5,v 1.1 2010/01/10 06:13:52 grog Exp grog $ +# +# Generate comparative temperature plots for 5 consecutive days. +# These may need changing +STATION=Dereel +TABLE=observations +COMMON=/home/grog/src/weather/WH-1080/plots/plot-common3.gnuplot +GRAPHFILE=/var/tmp/myplot.foo +OUTFILE=/home/grog/public_html/weather/myplot.png + +# Generate some constants. +# Calculate time zone offset from UTC +# Convert to seconds at UTC +NOW=`date +%Y%m%d%H%M` +UTC=`TZ=GMT date -j $NOW +%s` +# And in local time zone +LOCAL=`date -j $NOW +%s` +# The difference is the time zone offset. +TZOFFSET=`expr $UTC - $LOCAL` +# Number of seconds in a day +DAYSECS=86400 +# 2000-1-1 0:0:0 UTC, the gnuplot epoch. Or so it should be, but for +# some reason my plots come out offset by 2 hours. Use GNUFUDGE until +# I find out why. +GNUFUDGE=7200 +Y2K=`expr 946684800` +MY2K=`expr $Y2K + $TZOFFSET + $GNUFUDGE` +# End of constant generation + +# Get the last date for this graph. +if [ $# -ge 1 ]; then + ENDDATE=$1 +else + ENDDATE=`date +%Y-%m-%d` +fi +# echo S $ENDDATE +# Frob these values +ENDTIME=`date -j -f "%F %T" "$ENDDATE 0:0:0" +%s` +# start 4 days earlier +STARTTIME=`expr $ENDTIME - $DAYSECS \* 4` +# Adjust to gnu epoch +GNUSTART=`expr $STARTTIME - $Y2K - $TZOFFSET - $GNUFUDGE` +# echo $ENDTIME - $Y2K - $TZOFFSET - $GNUFUDGE + +# echo end $ENDTIME start $STARTTIME +XTICS=10800 # tics every 3 hours + +# echo DATE $STARTDATE ENDDATE $ENDDATE GNUEND $GNUEND DURATION $DURATION XTICS $XTICS + +# ************************************************** +# End of setup crap +# ************************************************** + +# Do the query +# Offset of day from FOO +OFFSET=`expr $Y2K + $TZOFFSET + $GNUFUDGE` +# echo O $OFFSET S $STARTTIME +for i in 1 2 3 4 5; do + DAY=`date -r $STARTTIME +"%Y-%m-%d"` + DAY[$i]=`date -r $STARTTIME +"%e %b"` +# echo i $i DAY $DAY + echo "SELECT unix_timestamp(timestamp(date, time))-$OFFSET, outside_temp from $TABLE WHERE station_id = '$STATION' and date ='$DAY' ORDER by time;" | \ + mysql weather > $GRAPHFILE.$i + STARTTIME=`expr $STARTTIME + $DAYSECS` # next day + OFFSET=`expr $OFFSET + $DAYSECS` # next day +done + +# And the plot + +GRAPHSIZE="375,250" +OUTFILE=$HTML/5days-$ENDDATE-small.png +( cat $COMMON +cat << EOF + set title "Daily temperature comparison" + set ylabel "Temperature (°C)" +plot "GRAPHFILE.1" using 1:2 title "${DAY[1]}" with lines smooth bezier, \ + "GRAPHFILE.2" using 1:2 title "${DAY[2]}" with lines smooth bezier, \ + "GRAPHFILE.3" using 1:2 title "${DAY[3]}" with lines smooth bezier, \ + "GRAPHFILE.4" using 1:2 title "${DAY[4]}" with lines smooth bezier, \ + "GRAPHFILE.5" using 1:2 title "${DAY[5]}" with lines smooth bezier +EOF +) | sed "s:MIDNIGHT:$GNUSTART:; s:ENDTIME:$GNUEND:; s:GRAPHFILE:$GRAPHFILE:g; s:SIZE:$GRAPHSIZE:; s:OUTFILE:$OUTFILE:; s:SMOOTHED: (smoothed):; s:SMOOTH:smooth bezier:; s:XTICS:$XTICS:" | \ + gnuplot +chmod 666 $OUTFILE + +GRAPHSIZE="1024,720" +OUTFILE=$HTML/5days-$ENDDATE-big.png +( cat $COMMON +cat << EOF + set title "Daily temperature comparison" + set ylabel "Temperature (°C)" +plot "GRAPHFILE.1" using 1:2 title "${DAY[1]}" with lines smooth bezier, \ + "GRAPHFILE.2" using 1:2 title "${DAY[2]}" with lines smooth bezier, \ + "GRAPHFILE.3" using 1:2 title "${DAY[3]}" with lines smooth bezier, \ + "GRAPHFILE.4" using 1:2 title "${DAY[4]}" with lines smooth bezier, \ + "GRAPHFILE.5" using 1:2 title "${DAY[5]}" with lines smooth bezier +EOF +) | sed "s:MIDNIGHT:$GNUSTART:; s:ENDTIME:$GNUEND:; s:GRAPHFILE:$GRAPHFILE:g; s:SIZE:$GRAPHSIZE:; s:OUTFILE:$OUTFILE:; s:SMOOTHED: (smoothed):; s:SMOOTH:smooth bezier:; s:XTICS:$XTICS:" | \ + gnuplot +chmod 666 $OUTFILE + +for i in 1 2 3 4 5; do + rm $GRAPHFILE.$i +done