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


# 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 中表达这一点......

4

1 回答 1

1

从gnuplot 网站上的运行平均值演示中获得一些灵感:

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 通常不会连接由表达式评估产生的点(请参阅此处此处的讨论,以及 gnuplot 文档为set datafile missing)。

于 2013-02-13T15:36:17.477 回答