具有更高时间精度的gnuplot替代方案

时间:2011-01-25 04:24:48

标签: python precision gnuplot

目前我正在使用gnuplot根据时间线绘制数据。但是时间线的精度以毫秒为单位,但gnuplot似乎只能处理秒数。

我已经看了几个替代方案,但实际上我只需要像gnuplot那样可以处理一小段时间。

用于主脚本的编程语言是Python,虽然我看过matplotlib,但它似乎比gnuplot更加“重型”。因为我不会总是更新图形方面的东西,所以我希望尽可能简单。

有什么建议吗?

更新

我正在使用gnuplot:

set xdata time
set timefmt "%Y-%m-%d-%H:%M:%S"

但是没有%f可以获得毫秒数。例如,这有效:

2011-01-01-09:00:01

但我需要:

2011-01-01-09:00:01.123456

4 个答案:

答案 0 :(得分:12)

根据它所说的gnuplot 4.6 manual,在“时间/日期说明符”下(gnuplot 4.6 PDF的第114页):

  

%S - 秒,输出上的整数0-60,输入上的(双)

这意味着当读取2013-09-16 09:56:59.412等时间戳时,小数部分将作为%S说明符的一部分包含在内。这样的时间戳将通过以下方式正确处理:

set timefmt "%Y-%m-%d %H:%M:%S"
set datafile separator ","
plot "timed_results.data" using 1:2 title 'Results' with lines

并提供以下数据:

2013-09-16 09:56:53.405,10.947
2013-09-16 09:56:54.392,10.827
2013-09-16 09:56:55.400,10.589
2013-09-16 09:56:56.394,9.913
2013-09-16 09:56:58.050,11.04

答案 1 :(得分:10)

您可以使用

设置刻度线格式
set format x '%.6f'

或(也许,我没有尝试过,因为我现在更喜欢使用Matplotlib并且没有在我的机器上安装gnuplot):

set timefmt "%Y-%m-%d-%H:%M:%.6S"

(注意与%S格式字符串一起指定的位数)。

更多细节可以在优秀的not so Frequently Asked Questions中找到。

答案 2 :(得分:1)

我正在使用gnuplot用于相同目的,我的输入如下:

35010.59199,100,101
35010.76560,100,110
35011.05703,100,200
35011.08119,100,110
35011.08154,100,200
35011.08158,100,200
35011.08169,100,200
35011.10814,100,200
35011.16955,100,110
35011.16985,100,200
35011.17059,100,200

第一列是午夜以来的秒数,逗号后面是纳秒部分。您可以将其保存在csv文件和gnuplut中:

set datafile separator ','
plot "test.csv" using 1:3 with lines

答案 3 :(得分:1)

我原本误解了你的问题。我认为时间格式的更精细分辨率是gnuplot的一个大问题,据我所知还没有实现。

一种可能的解决方法是使用awk将日期转换为秒数,例如

plot  "<awk 'your_awk_one_liner' file1.dat" with lines

然后只是按照双重情节进行常规双重操作并忘记每次都是(有点像Martin的解决方案)。 我担心我对awk不是很好,所以我无法帮助这一点 - 这些页面可能会有所帮助 - http://www.gnu.org/manual/gawk/html_node/Time-Functions.htmlhttp://www.computing.net/answers/unix/script-to-convert-datetime-to-seco/3795.html。 这里描述了awk与gnuplot的使用:http://t16web.lanl.gov/Kawano/gnuplot/datafile3-e.html

然后,您可以使用正确的时间绘制第二个轴(而不是数据) - 类似于此处使用的方法:Is there a way to plot change of day on an hourly timescale on the x axis?

我担心我没有时间尝试编写完整的解决方案 - 但应该有可能采取合理的措施。

祝你好运 - 如果你有所作为,请随时向我们提供最新信息 - 我会感兴趣的。