Datetime 我能画出他们';是否以添加毫秒的UNIX时间戳的形式给出?

Datetime 我能画出他们';是否以添加毫秒的UNIX时间戳的形式给出?,datetime,gnuplot,Datetime,Gnuplot,我在CentOS 6.6上使用gnuplot 4.4 我在网上发现了许多显示以下内容(注意使用%.3S)的时间戳可以解析像“12:42:51.047”这样的时间戳并将其用作X轴值: set xdata time set format x "%H:%M:%.3S" set timefmt "%H:%M:%S" 但是,我的输入不像HH:MM:SS.mmm,而是像ssss.mmm,其中不可分割的部分是UNIX时间戳 我尝试了以下操作,但由于所有数据点都在“00:00:00”呈现,因此解析似乎失败:

我在CentOS 6.6上使用gnuplot 4.4

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

set xdata time
set format x "%H:%M:%.3S"
set timefmt "%H:%M:%S"
但是,我的输入不像
HH:MM:SS.mmm
,而是像
ssss.mmm
,其中不可分割的部分是UNIX时间戳

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

没有给出任何迹象表明这是可能的,但是,它也没有说
%H:M:%.3S
也会起作用。
有可能做我想做的事吗?如果是,如何实现?

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


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

必须仅为输出提供精度。对于解析,秒(或时间戳)被视为浮点数。但是,似乎只有在版本4.6.4(此处测试)之后才支持读取毫秒时间戳

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

然后您还必须知道,在版本5之前,gnuplot的时间引用是1。2000年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 ($1 - 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
生成以下输出


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

为什么使用向下投票?:(您使用的是什么操作系统?必须仅为输出提供精度。对于解析,秒(或时间戳)被视为浮点数。但是,只有在版本4.6.4(此处测试)之后才支持以毫秒为单位读取时间戳)。@Christoph:这令人沮丧:(您可以使用unix/linux
date
命令将
…SSS.mmm
格式转换为gnuplot可以接受的任何格式。不幸的是,这是一个相当昂贵的过程。嗯……也许
gawk
时间函数会更有效。我不必经常使用它,所以请指出这是否对您有效,其他人也会有效。)给你一些例子来帮助你。祝你好运。CentOS 6.6只提供高达4.4的软件包,而且由于我将应用程序部署为RPM,我不想在依赖项方面偏离常规。很好。这就是问题所在!:)我刚刚意识到,减法实际上是不对的。你确定4.4不也把时间引用当作UNIX时代吗?我用($1)来做
:2
似乎得到了正确的时间。它是正确的。我看到了您删除的问题,并对其进行了评论:将完整的日期添加到输出中,您将看到,只有在减去相应的偏移量时,它才是正确的。假警报..并使用Gnuplot epoch(使用
-0
)或UNIX epoch完成共关联(使用
-946684800
)给我一天中的同一时间组件。意外地写
-94668400
不会:POkay,我想这就是整个轴滴答的位置,所以你是对的,我应该在问题中指定这一点(当时没有意识到它可以引导答案)。轴应该“看”就像一个时间轴,有“HH:MM:SS”格式,但这一个没有
gnuplot> plot "gnuplotdatatest.txt" w l
gnuplot> set yrange [0:4]
gnuplot> replot