2

我想在 x 轴上绘制一天中的几个小时,但打印一天从一天滚动到下一天的日期。所以 x 轴可能看起来像这样:

11/02 04:00 08:00 12:00 16:00 20:00 11/03 04:00 08:00 ...

在 gnuplot 中是否有一种理智的方法可以做到这一点?

FWIW,我的文件目前看起来像这样:

set xdata time
set timefmt "%Y-%m-%d|%H:%M:%S"
plot '-' using 1:2 with lines linewidth 1 linecolor rgb "#FF0000"
2013-11-02|00:00:48 123.0
2013-11-02|00:00:55 124.0
2013-11-02|00:01:06 121.0
2013-11-02:00:01:17 123.0
...
2013-11-04|23:59:41 241.0
2013-11-04|23:59:52 241.0
4

2 回答 2

3

那是一个艰难的,让我思考了一下。您可以这样做:

您需要将 x 轴的格式设置为%H:%M,然后将其替换为00:00日期,就像在这个答案中所做的一样。

然后主要的工作是提取午夜的时间戳。我stats为此使用了命令(至少需要 4.6.0 版),但是因为它不支持时间数据,所以你必须摆弄一下strptime类似的东西:

fmt = "%Y-%m-%d|%H:%M:%S"
stats 'file.txt' using (strptime(fmt, stringcolumn(1))) nooutput
t = int(STATS_min)
t_start = t - tm_hour(t)*60*60 - tm_min(t)*60 - tm_sec(t)
num_days = 2 + (int(STATS_max) - t)/(24*60*60)

set xdata time
set timefmt fmt
set xtics 4*60*60
set for [i=1:num_days] xtics add (strftime('%m/%d', t_start+(i-1)*24*60*60) t_start+(i-1)*24*60*60)
set format x '%H:%M'
plot 'file.txt' using 1:2 with lines

我增加num_days了12以说明 x 范围可能自动扩展到下一个抽动。

您的数据的结果是(使用 4.6.4):

在此处输入图像描述

于 2013-11-09T22:10:05.573 回答
1

这是一个版本xticlabels

$data <<EOD
2013-11-02|00:00:48 123.0
2013-11-02|00:00:55 124.0
2013-11-02|00:01:06 121.0
2013-11-02|00:01:17 123.0
2013-11-04|23:59:41 241.0
2013-11-04|23:59:52 241.0
EOD

set xdata time
set timefmt "%Y-%m-%d|%H:%M:%S"

plot $data using 1:2 w l # plot to get GPVAL_X_MIN GPVAL_X_MAX

t = GPVAL_X_MIN
t_start = t - tm_hour(t)*60*60 - tm_min(t)*60 - tm_sec(t)
num_days = 1 + (GPVAL_X_MAX-GPVAL_X_MIN)/(24*60*60)

replot [i=0:6*num_days:1] '+' us (t=t_start+i*24*60*60/6, strftime('%Y-%m-%d|%H:%M:%S', t)):(NaN):xtic(strftime(int(i)%6?'%H:%M':'%m-%d',t)) t ""

在此处输入图像描述

所以格式是用 选择的int(i)%6?'%H:%M':'%m-%d'

这受到gnuplot: set link and x2tics in interactive mode的启发。

于 2020-03-12T10:27:50.793 回答