开发者

Is there a way to plot change of day on an hourly timescale on the x axis?

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:开发者_StackOverflow30   00:00   00:30   01:00
                              2010-11-17

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


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

Is there a way to plot change of day on an hourly timescale on the x axis?

All the best,

Tom

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜