以毫秒为单位解析 UNIX 时间戳作为时间
Parsing UNIX timestamps in milliseconds as time
版本:gnuplot v5.3.0
上下文
我正在尝试绘制以下 CSV 数据,其中第一列是 UNIX 时间戳(以毫秒为单位),带有浮点符号,第二列是表示即时吞吐量的整数(在 units/s).
...
1.6069112402441587e+12,334
1.606911240244567e+12,335
1.6069112402475227e+12,336
1.6069112402481619e+12,337
...
为此,我编写了以下脚本文件:
set xdata time
set timefmt "%s"
set datafile separator comma
plot "results.csv" u 1:3
我从gnuplot
V5文档中了解到,这个版本支持毫秒精度:
The current version of gnuplot stores time to a millisecond precision.
问题
执行 plot
命令后,gnuplot
对 CSV 文件中的每个数据条目抛出以下警告,并且不绘制任何值:
"throughput.plt", line 15: warning: time value out of range
我试过的
我在 秒 内将数据文件第一列的所有条目转换为 UNIX 时间戳(将 e+12
更改为 e+9
)。这次plot
执行没有任何错误,但精度损失使得图形过于近似以致于无法分析。
gnuplot
中有没有办法以毫秒为单位提取 UNIX 时间戳?
从所有值中减去第一个值。像这样的东西。您也可以为此使用伪列 [=11=]
。
代码:(编辑:我更喜欢复制粘贴示例,包括数据)
### normalize time data relative to start time
reset session
# create some random test data
set print $Data
x = 1.6069112402441587e+12
y = 333
do for [i=1:10000] {
print sprintf("%.16f, %d",x=x+rand(0)*10, y=y+int(rand(0)*15)-7)
}
set print
set datafile separator comma
set key top left
set xlabel "relative time in seconds"
plot t=0 $Data u ((t==0 ? (t0=, t=1) : NaN), (-t0)/1000 ):2 w l title "relative time"
### end of code
结果:
如果表示时间的列已经用UNIX时间表示为实数,则不需要set timefmt "%s"
。按原样阅读数字就足够了。
但是,您数据中的数字“1.6069112402441587e+12”被解释为 UNIX 时间“52890/12/27 17:24:04 +0000”。所以你会收到消息“警告:时间值超出范围”。这当然不是你想要的时间。
如果您要按原样使用数据,脚本将如下所示。
set xdata time
# set timefmt "%s" ### This line is not needed!
set datafile separator comma
set format x "%H:%M\n%.4S"
set grid xtics
plot "results.csv" u (/1000):2 w linespoints
版本:gnuplot v5.3.0
上下文
我正在尝试绘制以下 CSV 数据,其中第一列是 UNIX 时间戳(以毫秒为单位),带有浮点符号,第二列是表示即时吞吐量的整数(在 units/s).
...
1.6069112402441587e+12,334
1.606911240244567e+12,335
1.6069112402475227e+12,336
1.6069112402481619e+12,337
...
为此,我编写了以下脚本文件:
set xdata time
set timefmt "%s"
set datafile separator comma
plot "results.csv" u 1:3
我从gnuplot
V5文档中了解到,这个版本支持毫秒精度:
The current version of gnuplot stores time to a millisecond precision.
问题
执行 plot
命令后,gnuplot
对 CSV 文件中的每个数据条目抛出以下警告,并且不绘制任何值:
"throughput.plt", line 15: warning: time value out of range
我试过的
我在 秒 内将数据文件第一列的所有条目转换为 UNIX 时间戳(将 e+12
更改为 e+9
)。这次plot
执行没有任何错误,但精度损失使得图形过于近似以致于无法分析。
gnuplot
中有没有办法以毫秒为单位提取 UNIX 时间戳?
从所有值中减去第一个值。像这样的东西。您也可以为此使用伪列 [=11=]
。
代码:(编辑:我更喜欢复制粘贴示例,包括数据)
### normalize time data relative to start time
reset session
# create some random test data
set print $Data
x = 1.6069112402441587e+12
y = 333
do for [i=1:10000] {
print sprintf("%.16f, %d",x=x+rand(0)*10, y=y+int(rand(0)*15)-7)
}
set print
set datafile separator comma
set key top left
set xlabel "relative time in seconds"
plot t=0 $Data u ((t==0 ? (t0=, t=1) : NaN), (-t0)/1000 ):2 w l title "relative time"
### end of code
结果:
如果表示时间的列已经用UNIX时间表示为实数,则不需要set timefmt "%s"
。按原样阅读数字就足够了。
但是,您数据中的数字“1.6069112402441587e+12”被解释为 UNIX 时间“52890/12/27 17:24:04 +0000”。所以你会收到消息“警告:时间值超出范围”。这当然不是你想要的时间。
如果您要按原样使用数据,脚本将如下所示。
set xdata time
# set timefmt "%s" ### This line is not needed!
set datafile separator comma
set format x "%H:%M\n%.4S"
set grid xtics
plot "results.csv" u (/1000):2 w linespoints