有没有办法在x轴上以小时时间刻度绘制日期变化?

时间:2010-11-17 22:36:01

标签: charts gnuplot time-series

我正在使用gnuplot绘制与时间相关的数据。

每5分钟左右取样,我有200个样品。

我用格式为

的x轴绘制这些图
set format x "%H:%M"

理想情况下,我希望每当x轴穿过午夜时打印日期......但是当它穿过午夜时。类似的东西:

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

那里的任何gnuplot大师都知道这样做的方法吗?

1 个答案:

答案 0 :(得分:2)

这是一个很好的问题。

以下内容基于t16web.lanl.gov/Kawano/gnuplot/plot4-e.html#5.12.

您基本上需要绘制两次数据,每个轴一次。 第二次绘制数据时,我将实际绘图移出范围(减去1000),这样就只绘制了一个绘图。以下shell脚本生成数据并将其绘制为如下图所示。

希望这是你想要的。

#!/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

一切顺利,

汤姆