2016-12-24 110 views
4

我有以下数据集时间/日期处理5

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 

和我要绘制柱3作为为4的函数的2(以及也5的功能,但是这不是问题)。格式是日/月和分钟:seconds.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整个脚本。

release notes状态

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

我有两个问题。首先,尽管显示“旧命令仍然有效”,但我在set timefmt x "%d/%m"上遇到错误。其次,也是最重要的,我无法弄清楚如何教gnuplot如何使用新命令读取我的x和y列。

注:我已经从2011年见过this question,但我觉得它不够优雅,我想保留现有格式的文件。

回答

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 release notes

时间坐标内部存储为相对于标准UNIX时代1970年1月1日的秒数。早期版本的gnuplot在内部使用了不同的时期(1-Jan-2000)。此更改解决了外部生成时间(以秒为单位)时引入的不一致问题。可以使用命令print strftime("%F",0)来确定特定gnuplot安装使用的时代惯例。时间现在被存储到至少毫秒的精确度。

通知的变化set xtics time。 xtics的输出格式与您的示例中的输出格式相同,并且与timecolumn()的第二个参数给出的输入格式不同。你似乎比以前有更多的灵活性,但语法已经改变。