2012-02-27 52 views
2

每个人。gnuplot:从一个月前到现在的阴谋数据

我有一些定期更新的数据。例如:

1330347541 79 100 6 163 38 
1330349341 80 103 6 165 38 
1330351141 80 104 6 166 40 
1330352941 80 104 6 166 40 
1330354741 81 104 8 167 41 

我想用gnuplot在图上绘制数据。

如何从一个月前到现在绘制数据?我需要选择哪个xrange?

编辑:我需要的东西,如 “设置的xrange [现在 - 2592000,现]”

+0

也许[这](http://stackoverflow.com/a/7833790/572616)的回答将帮助你... – Woltan 2012-02-27 11:49:16

+0

不。这不是对我来说非常有用。:( – lollo 2012-02-27 16:55:59

回答

1

解决方案:

plot \ 
    "< awk -v date=`date +'%s'` '{ if ($1 > date - 2592000) print $0; }' datafile" using 1:2 … 
1

我也有类似的问题。 虽然你没有完全展示你是如何做这个情节的。 我希望使用时间戳设置范围,并发现意想不到的事情。 。 。所以虽然很古老,但我认为值得回答这个问题。

两个有用的东西:

  1. 你可以用x范围设置为绘制[*。*],然后“显示x范围”,找出了x范围内represantation正在使用您的gnuplot。

  2. 你可以在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”