我也有类似的问题。 虽然你没有完全展示你是如何做这个情节的。 我希望使用时间戳设置范围,并发现意想不到的事情。 。 。所以虽然很古老,但我认为值得回答这个问题。
两个有用的东西:
你可以用x范围设置为绘制[*。*],然后“显示x范围”,找出了x范围内represantation正在使用您的gnuplot。
你可以在gnuplot中使用()来插入计算和函数调用。
回答#1你绘制使用timecolumn? gnuplot之前4.7 gnuplot内部时间相对于2000年1月1日被追踪,而不是unix时代1970年1月1日。答案取决于你使用的是什么版本的gnuplot?您可以在gnuplot中使用()来完成调用函数或进行计算。您可以调出shell命令日期以获取时间戳。所以。 。 。
set xrange [(system("date -d 'now' +%s")-2592000):(system("date -d 'now' +%s"))]
show xrange
set xdata time
set xrange [ "1431007547" : "1431008547" ] noreverse nowriteback
在gnuplot 4.7之前,您还必须从所有时间戳中减去946684800秒。实际上,我发现大约1893370441秒=〜60年是我用gnuplot(4.6)版本减去的值。通过在没有设置xrange的情况下对时间戳数据进行绘图来查找时间戳偏移量,然后执行“显示xrange”并计算偏移量。
所以定义偏移使用和设置x范围如下:
####################################################################
## 1893456000 = 60 years seems to be the offset gnuoplot is using.##
## or is it 1893370441 ? yeah it seems to be a bit short of 60 years.
## I believe 946684800 should be the offset prior to 4.7. ##
####################################################################
TIMEOFFSET=946684800
TIMEOFFSET=1893370441
set xrange [(system("date -d 'now' +%s")-2592000-TIMEOFFSET):(system("date -d 'now' +%s")-TIMEOFFSET)]
回答#2实际上是你的xrange在数据文件中的行? (即不使用时间列)。在这种情况下,根据数据行设置您的xrange。如果你的数据是周期性的,你可以计算返回的行数=特定的时间段。
我碰巧使用这个版本的gnuplot:
Version 4.6 patchlevel 1 last modified 2012-09-26
更多的细节和探索......
做你的数据的基本情节:
set xdata time
set timefmt "%s"
set timefmt x "%s"
set format x "%H:%M"
plot "lollo.data" using 1:2, "lollo.data" using 1:3
好了,现在设置一个简单的x范围从第一个到的数据最后的时间戳。
set xrange [1330347541:1330351141]
plot "lollo.data" using 1:2, "lollo.data" using 1:3
^
all points y value undefined!
哇!真?那有什么问题? 让我们做'显示xrange'来看看gnuplot认为范围是什么。
show xrange
set xdata time
set xrange [ "1330347541" : "1330351141" ] noreverse nowriteback
看起来没问题。我们将xrange设置为*:*(gnuplot开头的是(你也可以'设置xrange恢复'但将它设置为[-10:10] - 不是我们想要的)),做一个情节,然后显示x范围。
set xrange [*:*]
plot "lollo.data" using :2, "lollo.data" using :3
show xrange
set xdata time
set xrange [ * : * ] noreverse nowriteback # (currently ["0":"4"])
hmmmn。 0:4!有趣。看起来xrange是在不及时的数据行上操作的。所以。这是你的问题吗?假设xrange将工作在时间戳而不是行?知道这一点,你可以根据行设置你的xrange。 == 答案#2
现在。我们使用时间列绘制数据。
set xrange [*:*]
plot "lollo.data" using (timecolumn(1)):2, "lollo.data" using (timecolumn(1)):3
show xrange
set xdata time
set xrange [ * : * ] noreverse nowriteback # (currently ["-563022900":"-563014800"])
噗! -563022900!?负时间戳。有趣。 那么时间戳整数计算奇怪/功能在这个版本的gnuplot?
让我们尝试使用timecolumn在数据和图中设置从第一个到最后一个时间戳的简单xrange。
set xrange [1330347541:1330351141]
plot "lollo.data" using (timecolumn(1)):2, "lollo.data" using (timecolumn(1)):3
^
all points y value undefined!
它不喜欢那样。可以理解的是,它是否在内部处理负面的时间戳编号。
让我们设置的使用()包围计算秒负范围之前一个月:
set xrange [(-563014800-2592000):-563014800]
plot "lollo.data" using (timecolumn(1)):2, "lollo.data" using (timecolumn(1)):3
工程。 对我来说。 gnuplot 4.6。 但-563014800从哪里来?!
$ date -d @1330347541
Mon 27 Feb 12:59:01 GMT 2012
$ dc -e '1330347541 16o p'
4F4B7E15
### ??? I didn't find any hex relation - looking for evidence of integer calc overflow/sign calc errors
# What offset
$ dc -e '0 1330347541 - 563022900 - p'
-1893370441
# taking a timestamp from today (7 march 2015) and doing a plot I saw gnuplot used xrange with -462448800 . . .
$ dc -e '0 1431000097 - 462448800 - p'
-1893448897
HAH!它大致相同。 -1893448897 =〜-1893370441 这只是大约60年。所以。正在使用60年的抵消额。在我的gnuplot版本中。 有趣。和YEESH。所以我似乎需要减去约1893456000秒来转换为内部gnuplot时间戳。其实1893370441似乎更接近需要的东西。
在互联网上的其他地方gnuplot的时代据说是在2000年。这意味着应该使用946684800的偏移量。但现在对我来说似乎不是这种情况。
YMMV。我猜。
使用偏移你可以从一个月前的现在设置x范围,以这样的:== 回答#1
TIMEOFFSET=1893370441
set xrange [(system("date -d 'now' +%s")-2592000-TIMEOFFSET):(system("date -d 'now' +%s")-TIMEOFFSET)]
又如何/为什么这是gnuplot的情况?
来自:http://gnuplot.10905.n7.nabble.com/30-year-time-offset-reading-nonuniform-matrix-s-input-td17231.html “对不起,我想也许是我,我没有使用UNIX当时, 所以2000似乎和任意的1970年
它最初并不意味着它是对用户可见,无论如何, 但后来,你可以使用数字,而不是字符串 等东西的时间数据设定范围发现。
我想我也有考虑,因为时间存储在一个实数, 这是不好的,进行一个大的偏移周围的罪它限制了可用于小数字的 分辨率。但我认为这可能不是 在实践中相关。
戴夫d”
也许[这](http://stackoverflow.com/a/7833790/572616)的回答将帮助你... – Woltan 2012-02-27 11:49:16
不。这不是对我来说非常有用。:( – lollo 2012-02-27 16:55:59