2013-10-24 87 views
2

有沒有辦法在gnuplot中繪製一個移動的標準偏差?移動標準偏差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之間考慮所有值。

+0

我試探性的回答是「是」,但在此之前我發佈任何我想要更多的細節。你想計算一定數量的點的stdev,從某個時間點的每個方向說2? – andyras

+0

我有一個值的時間系列。現在我想根據具體的時間框架繪製stdev。 (例如,時間範圍具有到未來和過去5天的範圍) –

+1

這不是不可能的,參見例如。關於如何訪問數據的[running average demo](http://gnuplot.sourceforge.net/demo_4.6/running_avg.html)或[this answer](http://stackoverflow.com/a/17945044/2604213)從前一行開始。但它非常不靈活(當改變點數時),而且非常麻煩。我建議你使用外部腳本,例如使用'python'來做這個計算。這可以通過例如在線實時完成。 'plot' Christoph

回答

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' 
+0

它應該是'plot'

+0

當我用上面寫的行調用它時,Gnuplot不會繪製python腳本的第二個值。當我單獨運行python腳本時,它會產生一個很好的我的數據輸出流(例如'71.5261680406 -0.67')。但是當繪圖時Gnuplot似乎忽略了第二個值。有什麼建議? –

+1

當你使用那個pl​​ot命令時,你不需要改變數據文件分隔符(也許你有'set datafile separator';''來繪製原始'csv'文件)。但這只是一個猜測,因爲我們無法知道你的繪圖腳本是怎樣的。另外,拿你的樣本數據,你需要使用'np.loadtxt(args.dataFile,delimiter =';')'和輸出你必須使用'print data [ii,2] ...'(時間是第三個列,如果您的示例文件中的註釋是正確的)。 – Christoph