绘制一些行数据的循环和

时间:2013-02-13 14:04:19

标签: gnuplot

我有一个存储给定时间戳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个值与时间的平均总和。 当然,我可以重新生成一个包含(带有评估总和)的新数据文件:


# 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 个答案:

答案 0 :(得分: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一般不会连接由表达式评估产生的点(参见讨论here和{{3 },以及set datafile missing)的gnuplot文档。