在gnuplot中绘图时如何为基于时间的数据添加偏移量

use*_*740 4 gnuplot

我想从我想要使用gnuplot绘制的文件中添加基于时间的数据的偏移量.我可以很好地绘制数据,但是当我尝试添加基于时间的偏移时,图形为空.

目的是绘制彼此相邻的多个条形图,如此处所述,但是使用基于时间的数据:两个图表"带框"彼此相邻并带有gnuplot

数据文件:

00:00 7719
01:00 20957
02:00 15989
03:00 9711
04:00 1782
05:00 871
06:00 4820
07:00 860
08:00 873
09:00 848
10:00 879
11:00 726
12:00 944
13:00 924
14:00 996
15:00 806
16:00 848
17:00 967
18:00 2277
19:00 2668
20:00 32183
21:00 14414
22:00 20426
23:00 16140
Run Code Online (Sandbox Code Playgroud)

我试图使用此代码绘制数据:

set xdata time
set timefmt "%H:%S"
set format x "%H"
set style fill solid 0.6 border -1
set boxwidth 0.3 relative
plot ["00:00":"23:30"] 'data.dat' using ($1-0.3):2 with boxes, \
  'data.dat' using ($1+0.3):2 with boxes
Run Code Online (Sandbox Code Playgroud)

这只是一个测试 - 真正的数据文件有额外的数据列,我试图使用偏移量将框放在彼此旁边,但是我对基于时间的数据和偏移没有好运.

没有偏移代码是好的:

set xdata time
set timefmt "%H:%S"
set format x "%H"
set style fill solid 0.6 border -1
set boxwidth 0.3 relative
plot ["00:00":"23:30"] 'data.dat' using 1:2 with boxes
Run Code Online (Sandbox Code Playgroud)

Chr*_*oph 13

对于带有timedata的计算,您必须使用该timecolumn()函数,该函数根据set timefmt设置从列中解析时间字符串.结果是以秒为单位的时间戳.因此,对于偏移量,您必须以秒为单位使用相应的时间:

set xdata time
set timefmt "%H:%S"
set format x "%H"
set style fill solid 0.6 border -1
set boxwidth 0.3 relative
set xrange["00:00":"23:30"]
set style data boxes
plot 'data.dat' using 1:2, \
     '' using (timecolumn(1)+60*20):($2*0.5), \
     '' using (timecolumn(1)+60*40):($2*0.7)
Run Code Online (Sandbox Code Playgroud)

这给出了:

在此输入图像描述

作为另一种变体则可以使用histogram风格,并使用格式化xtic标签strftimetimecolumn:

set timefmt "%H:%S"
set style fill solid 0.6 border -1
set style data histogram
set style histogram clustered gap 1
plot 'data.dat' using 2:xtic(strftime('%H', timecolumn(1))), \
     '' using ($2*0.5), \
     '' using ($2*0.7)
Run Code Online (Sandbox Code Playgroud)

这给了:

在此输入图像描述

两个数据块之间没有分离set style histogram clustered gap 0.

为了控制抽屉标签,您可以使用类似的东西

plot 'data.dat' using 2:xtic((int($0) % 2 == 0) ? strftime('%H', timecolumn(1)) : '')
Run Code Online (Sandbox Code Playgroud)

它只打印数据文件中每个第二个条目的标签($0指行号).