gnuplot 5

时间:2016-12-24 22:26:30

标签: gnuplot

我有以下数据集

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等效项)现在出错了。您似乎无法再添加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,但我发现它并不优雅,我想保留目前格式的文件。

1 个答案:

答案 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()的第二个参数给出的输入格式不同。您似乎比以前拥有更多的灵活性,但语法已经改变。