2013-02-13 37 views
0

我有一個數據文件存儲給定的時間戳k值。繪製一些行數據的循環總和

例:

 

# data.dat 
# Example for k = 3  
# Time ID value 
1 0 1.555 
1 1 1.76 
1 2 12.56 
2 0 1.75 
2 1 2.04 
2 2 13.04 
3 0 2.01 
3 1 0.52 
3 2 12.99 
# ... 
 

我可以單獨打印每個ID的數據與時間如下:

 

set xrange [0:4] 
set yrange[0:14] 
set xtics 1 
plot "data.dat" every 3 using 1:3 title "ID=0" with lp, \ 
    ""   every 3::1 using 1:3 title "ID=1" with lp, \ 
    ""   every 3::2 using 1:3 title "ID=2" with lp 
 

但我很感興趣地繪製3個值之和的平均值VS時間。 當然,我可以再生含(含評估和)一個新的數據文件:

 

# avg_data.dat modified to 
# Example for k = 3  
# Time ID value 
1 (1.555+1.76+12.56)/3 
2 (1.75+2.04+13.04)/3 
3 (2.01+0.52+12.99)/3 
# ... 
 

但當然,我正在尋找一個自動化的方式直接使用data.dat文件做快遞,在gnuplot的...

回答

1

running average demo on the gnuplot site:

k = 3 

back1 = back2 = back3 = 0 

shifter(x) = (back3 = back2, back2 = back1, back1 = x) 
avger(x,y) = (shifter(x), y == k - 1 ? (back1 + back2 + back3)/3 : 1/0) 

plot 'data.dat' u 1:(avger($3, $2)) with points pt 7 

這gnuplot的4.6.1對我的作品借鑑一些靈感。如果你想讓每個時間步的點連接成一條線,那麼對數據進行預處理可能會更好,因爲gnuplot一般不會連接表達式評估產生的點(參見討論herehere,以及gnuplot文檔爲set datafile missing)。