当它们作为 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 默认处理输入列的方式。
我在 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 默认处理输入列的方式。