gnuplot 针对时差进行绘图

问题描述 投票:0回答:2

我正在尝试绘制一些在 x 轴上具有时间(日期)的数据,格式为 2015-12-20。我不想根据绝对日期绘制数据,而是根据该日期与另一个参考“零”日期之间的时间差绘制数据。参考日期的格式相同,例如:2015-12-15。

是否可以提供以下格式的数据文件:

%Y-%m-%d 值

%Y-%m-%d 值

但是让 gnuplot 创建一个图,其中 x 轴是自参考日期以来的天数?

gnuplot
2个回答
3
投票

这并不理想,可能有更好的方法,但这是有效的(我假设第 1 列是您的日期列,第 2 列是您的 y 轴值):

plot "data.txt" u ((strptime("%Y-%m-%d",strcol(1))-strptime("%Y-%m-%d","2015-12-10"))/86400.0):2

strptime 函数将时间字符串转换为内部时间表示(自某个参考日期以来的秒数),strcol 函数从第 1 列读取该字符串。我们从“零”日期中获取差值(这里我们使用 12 月 10 日) )。这将给出以秒为单位的差异,因此我们除以一天中的秒数 86400(我们使用 86400.0,这样它就不会在除法中截断为整数)。这将使 x 轴成为自参考日期以来的天数。


0
投票

Matthew的建议是正确的方向。 以下脚本略有不同:

  • 定义一个单独的函数,使实际的绘图命令更短、更清晰。
  • 手动插入的固定开始日期将自动替换为数据集的第一个日期。这可能也是OP的意图。

由于使用了数据块,以下示例需要 gnuplot>=5.0.0。但它肯定可以适应 gnuplot 4.x 版本。

脚本:(适用于 gnuplot>=5.0.0,2015 年 1 月)

### plot time difference to first date entry
reset session

$Data <<EOD
2015-12-01    1.1
2015-12-03    3.2
2015-12-05    2.3
2015-12-10    5.4
2015-12-13    9.5
2015-12-17    4.6
2015-12-19    7.7
2015-12-24    6.8
EOD

dt(col) = (t=strptime("%Y-%m-%d",strcol(col)), $0==0?(t0=t,0):t-t0)/86400.
set xlabel "Number of days"

plot $Data u (dt(1)):2 w lp pt 7 lc rgb "red" ti "Data"
### end of script

结果:

© www.soinside.com 2019 - 2024. All rights reserved.