【问题标题】:Moving Standard Deviation Gnuplot移动标准差 Gnuplot
【发布时间】:2013-10-28 23:39:11
【问题描述】:

有没有办法在 gnuplot 中绘制移动标准差?

我有一个大文件,我正在从中绘制我的常规信号。现在我需要根据来自 x 的框架计算/绘制 y 的标准偏差。

有什么想法吗?

谢谢

添加说明:

我的数据就是这样设置的:

我使用以下命令进行绘图: plot "Data.csv" using 1:3 title 'Sample' ls 1

数据文件是这样的

#Value1;Value2;Time
0.1;0.2;1
0.11;0.2;1.5
0.12;0.3;1.9
0.11;0.2;2.1
0.3;0.21;2.2
0.2;0.31;2.9

时间序列不规则。要计算标准开发,我需要考虑一个取决于时间的固定框架。在此示例中,我将使用1 的时间范围。所以对于时间1.9 的值,我需要考虑1.42.4 之间的所有值。

【问题讨论】:

  • 我的暂定答案是“是”,但在发布任何内容之前,我想了解更多细节。您想计算一组点的标准差,比如从某个时间点开始在每个方向上计算 2 个点吗?
  • 我有一个带有值的时间序列。现在我想根据特定的时间范围绘制标准差。 (例如,时间范围为未来和过去 5 天)
  • 这不是不可能的,参见例如running average demothis answer 关于如何访问前一行的数据。但它非常不灵活(改变点数时),而且非常繁琐。我建议您使用外部脚本,例如使用python,来做这个计算。这可以通过例如即时完成。 plot '< python mov_stdvar.py'.
  • 你能举个简单的例子吗?
  • 这取决于你实际输入数据的格式,特别是因为它涉及到时间数据,需要正确读入。您可以包含输入数据的简短示例吗? x-范围应该以点数还是时间跨度给出?

标签: python statistics gnuplot standard-deviation


【解决方案1】:

我同意@Christoph 的观点,python 使这变得更容易。以下是如何在 python 中计算正在运行的 stdev 的示例:

#!/usr/bin/env python2.7

import argparse

parser = argparse.ArgumentParser(description='Computes a moving standard deviation for a data file')
parser.add_argument('--number', '-n', help='Window size (number of points to either side)', type=int)
parser.add_argument('dataFile', help='Name of data file', type=str)

args = parser.parse_args()
n = args.number

# I hope you have numpy, it makes things much easier
import numpy as np

# assuming two-column time/datum format
data = np.loadtxt(args.dataFile)

for ii in range(n,len(data)-n):
    print data[ii,0], np.std(data[ii-n:ii+n+1,1])

现在您可以从 gnuplot 调用数据文件上的脚本了:

plot '<python boxcarStdev.py -n 5 mydata.dat'

【讨论】:

  • 应该是plot '&lt;python boxcarStdev.py -n 5 mydata.dat'
  • 当我用上面写的行调用 Gnuplot 时,它没有绘制 Python 脚本的第二个值。当我单独运行 python 脚本时,它会生成一个很好的数据输出流(例如71.5261680406 -0.67)。但是 Gnuplot 在绘图时似乎忽略了第二个值。有什么建议吗?
  • 当您使用该绘图命令时,您不需要更改数据文件分隔符(也许您有一个 set datafile separator ';' 来自绘制原始 csv 文件)。但这只是一个猜测,因为我们不知道您的绘图脚本是什么样子。此外,获取您需要使用的示例数据np.loadtxt(args.dataFile, delimiter=';'),对于输出,您必须使用print data[ii,2]...(如果示例文件中的 cmets 正确,则时间是第三列)。
  • 感谢您的评论。我在 gnuplot 脚本中有 set datafile separator ";"
猜你喜欢
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 2014-02-27
  • 2014-05-09
  • 2017-04-06
  • 1970-01-01
  • 2017-01-15
  • 2021-11-04
相关资源
最近更新 更多