gnuplot 5中的时间/日期处理

4
我有以下数据集。
0   22/01   5:40.416    07/01   5:59.149
1   29/01   5:49.765    14/01   5:59.036
2   05/02   5:45.675    21/01   5:52.160
3   12/02   5:44.241    28/01   5:55.160
4   19/02   5:49.330    04/02   5:44.065
5   26/02   5:48.044    11/02   5:34.803

我希望您能将第三列作为第二列的函数进行绘制(同时第五列作为第四列的函数也是如此,但这不是问题所在)。格式为日/月和分钟:秒.xxx。
在gnuplot 4.6中,通过为x和y设置不同的时间格式来指示如何读取两列数据有些直接。一个最小化的脚本例子如下所示:
set xdata time
set timefmt x "%d/%m"
set format x "%b"

set ydata time
set timefmt y "%M:%S"
set format y "%M:%S"

plot 'data.dat' using 2:3

我最近升级到gnuplot 5,命令set timefmt x "%d/%m"(及其y等效命令)现在会出错。似乎你不能再使用xy,而且整个脚本只能使用单个timefmt发行说明中指出:

使用时间格式生成轴刻度标签现在由set {xy}tics time控制,而不是由set {xy}data time控制。因此,先前对于输入或输出set xdata timeset timefmt x的调用是不必要的。这些旧命令仍然有效,但已被弃用。

我有两个问题。首先,尽管有“旧命令仍然有效”的说明,但set timefmt x "%d/%m"会报错。其次,最重要的是,我无法弄清楚如何使用新命令教gnuplot读取我的x和y列。
注意:我看过2011年的这个问题,但我觉得它不够优雅,我想保留目前的文件格式。
1个回答

4
他们在这个新版本中所做的改进使得它更加灵活。不再需要指定默认的时间格式,然后要求你的列符合该格式,而是可以为每个特定的时间列指定一个格式。这样,只要你指定了每个列的格式,就不必保持一致。你还可以为一个以上的xy轴使用时间格式。
你提出的问题的解决方案在你引用的发布说明中提到,但没有很好地解释。请使用timecolumn(N,"timeformat")函数,例如以下方式:
set xtics time
set format x "%b"

set ytics time
set format y "%M:%S"

plot 'data.dat' using (timecolumn(2, "%d/%m")):(timecolumn(3, "%M:%S"))
set timefmt语句已被替换为这个新的带有两个参数的timefunction(),它允许您在using子句中为每列指定格式。请注意()围绕timecolumn()。这意味着您可以(如果需要)对时间值进行一些计算。根据同一个5.0版本说明

时间坐标以相对于标准unix纪元1-Jan-1970的秒数存储在内部。较早版本的gnuplot在内部使用了不同的纪元(1-Jan-2000)。此更改解决了在外部生成秒级时间时引入的不一致性。可以使用命令print strftime("%F",0)确定特定gnuplot安装所使用的纪元约定。时间现在至少以毫秒精度存储。

请注意更改为set xtics time。xtics的输出格式与您的示例中相同,并且与timecolumn()的第二个参数给出的输入格式不同。您似乎比以前更灵活,但语法已更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接