我有一个存储给定时间戳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中表达...
答案 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文档。