Question

I'm using gnuplot to plot time-dependent data.

The samples are taken every 5 minutes or so and I have 200 samples.

I plot these with the x axis formatted to

set format x "%H:%M"

Ideally, I'd like to print the date whenever the x-axis crosses midnight... but only when it crosses midnight. Something like:

22:00   22:30   23:00   23:30   00:00   00:30   01:00
                              2010-11-17

Any gnuplot gurus out there know a way to do this?

Was it helpful?

Solution

Its a good question.

The following is based on t16web.lanl.gov/Kawano/gnuplot/plot4-e.html#5.12.

You basically need to plot the data twice, once for each axis. The second time I plot the data, I move the actual plot out of range (by subtracting 1000) so that only one plot is drawn. The following shell script generates the data and plots it as in the graph below.

Hope this is what you want.

#!/bin/bash

echo "2010-11-17 13:30:01,1
2010-11-17 13:30:12,3.1
2010-11-18 13:30:23,2.1
2010-11-19 13:30:34,4" > two_axis.dat

gnuplot<<EOF
## Plot a second axis with the day rather than the time
## Based on example from http://t16web.lanl.gov/Kawano/gnuplot/plot4-e.html#5.12.

##  make a png file
set term png small
set output "two_axis.png"
## reduce the size of the main plot to allow for second axis
set size 1.0,0.8
set bmargin 0
set lmargin 3  # set space given to axis
## The data for the second plot will be set to be out of range,
##     Need to explicitly set range here.
set yrange [0:5] 

set multiplot

## Main plot, raised slightly
set origin 0,0.2
set datafile separator "," 
set xdata time
set timefmt "%Y-%m-%d %H:%M:%S" 
set format x "%H:%M" 

## Need to set xrange so that the axes of the two plots match exactly
set xrange["2010-11-17 12:00:00":"2010-11-19 14:00:00"]

## The main plot!
plot "./two_axis.dat" using 1:2 with lines

## Now want to draw second axis with just the days
set origin 0,0.1
## Dont want any ytics or minor xtics or drawn axes
set noytics
unset mxtics
unset border
## Don't want axis mirrored, want tick scales to zero so that it vanishes,
##    And some format for the days of the week axis
set xtics nomirror scale 0 format "%Y-%m-%d"

##  Specify the tics interval in seconds 1 day = 86400 seconds
set xtics "2010-11-01 00:00:00", 86400,   "2010-12-01 00:00:00"

## Replot the graph but this time with the data shifted out of the way,
##  we don't want to replot the data (difficult to align with previous plot) - 
##  we just want the axis
plot "./two_axis.dat" using 1:(\$2-1000) with lines notitle

## clean up
unset multiplot
set output
set term pop
EOF

alt text

All the best,

Tom

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top