当它们作为 UNIX 时间戳加上毫秒时,我可以绘制时间吗?

Can I plot times when they're given as UNIX timestamps with added milliseconds?

我在 CentOS 6.6 上使用 gnuplot 4.4。

我在网上发现很多 example 显示以下内容(注意 %.3S 的使用)将启用像“12:42:51.047”这样的时间戳来解析并用作 X轴值:

set xdata time
set format x "%H:%M:%.3S"
set timefmt "%H:%M:%S"

但是,我的输入不像HH:MM:SS.mmm,而是像SSSSSSSSSS.mmm,其中整数部分是UNIX 时间戳。

我尝试了以下操作,但解析似乎失败了,因为所有数据点都在“00:00:00”呈现:

set xdata time
set format x "%.3s"
set timefmt "%H:%M:%S"

The manual 没有任何迹象表明这是可能的,但话又说回来,它也没有说 %H:M:%.3S 会起作用。 有没有可能做我想做的事?如果是,怎么做?

较新版本的 gnuplot 支持带小数部分的 Unix 时间戳格式 %s。您需要更新到 4.6 或 5.x 或更高版本。

如果不确定,请检查 src/time.c。

只能为输出指定精度。对于解析,秒(或时间戳)被视为浮点数。但是从 4.​​6.4 版本(已在此处测试)开始,似乎只支持以毫秒为单位的时间戳读取。

但是,有一个解决方法:在 using 语句中指定 () 而不是 1 会使 gnuplot 将该值视为普通浮点数。请注意,我没有设置任何 timefmt,因为它无论如何都会被此解决方法规避。

那你肯定也知道,在版本5之前,gnuplot的时间参考是2000年1月1日,所以你必须修正各自的偏移量(2000年1月1日的Unix时间戳是946684800)。因此,以下适用于 gnuplot 4.4:

set xdata time
set format x '%d.%m.%Y %H:%M:%S'
plot 'file.dat' using ( - 946684800):2

除了停止与默认设置作对之外,您什么都不用做。对于此输入数据:

1000000000.001 1
1000000000.002 2
1000000000.003 3
1000000000.004 3
1000000000.005 2
1000000000.006 1

以下命令

gnuplot> plot "gnuplotdatatest.txt" w l
gnuplot> set yrange [0:4]
gnuplot> replot

产生以下输出

SSSSSSSSSS.mmm 格式的时间戳只是浮点数(十进制表示),这是 GNUplot 默认处理输入列的方式。