我正在尝试绘制一些在 x 轴上具有时间(日期)的数据,格式为 2015-12-20。我不想根据绝对日期绘制数据,而是根据该日期与另一个参考“零”日期之间的时间差绘制数据。参考日期的格式相同,例如:2015-12-15。
是否可以提供以下格式的数据文件:
%Y-%m-%d 值
%Y-%m-%d 值
但是让 gnuplot 创建一个图,其中 x 轴是自参考日期以来的天数?
这并不理想,可能有更好的方法,但这是有效的(我假设第 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 轴成为自参考日期以来的天数。
Matthew的建议是正确的方向。 以下脚本略有不同:
由于使用了数据块,以下示例需要 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
结果: