我有以下数据集
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列绘制为2的函数(并且还将5作为4的函数,但这不是问题)。格式为日/月和分钟: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
等效项)现在出错了。您似乎无法再添加x
或y
,并且只能使用单个timefmt
作为整个脚本。
现在使用时间格式生成轴刻度标签
set {xy}tics time
而不是set {xy}data time
。因此先前 拨打set xdata time
或set timefmt x
是不必要的 输入或输出。这些旧的命令仍然有效,但是 弃用。
我有两个问题。首先,尽管表明“旧命令仍然有效”,但我在set timefmt x "%d/%m"
上收到错误。其次,最重要的是,我无法弄清楚如何使用新命令教gnuplot如何读取我的x和y列。
注意:我从2011年开始看到this question,但我发现它并不优雅,我想保留目前格式的文件。
答案 0 :(得分:4)
他们使用这个新版本所做的改进实际上使其更加灵活。您可以为每个特定时间列指定格式,而不是指定默认时间格式,然后要求您的列适合该格式。这样,只要您指定每个列的格式,就不必保持一致。您还可以将时间格式用于 x 或 y 轴之外的其他格式。
您引用的发行说明中提到了您的问题的解决方案,但它并没有很好地解释它。使用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:
时间坐标在内部存储为相对于1970年1月1日标准unix时期的秒数。早期版本的gnuplot在内部使用了不同的时期(2000年1月1日)。此更改可解决在外部生成以秒为单位的时间时引入的不一致问题。可以使用命令
print strftime("%F",0)
确定特定gnuplot安装使用的纪元约定。现在时间存储到至少毫秒精度。
请注意对set xtics time
的更改。 xtics的输出格式与示例中的输出格式相同,并且与第timecolumn()
的第二个参数给出的输入格式不同。您似乎比以前拥有更多的灵活性,但语法已经改变。