Gnuplot 绘制某些行数据的循环和
我有一个存储给定时间戳k值的数据文件 例: 我可以单独打印每个ID的数据和时间,如下所示:Gnuplot 绘制某些行数据的循环和,gnuplot,Gnuplot,我有一个存储给定时间戳k值的数据文件 例: 我可以单独打印每个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:
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个值与时间的平均和。
当然,我可以重新生成一个新的数据文件,该文件包含(计算和):
但当然,我正在寻找一种自动化的方式,直接使用
data.dat
文件在gnuplot中表达 从
这在gnuplot 4.6.1中适用。如果希望将每个时间步的点连接成一行,则最好对数据进行预处理,因为gnuplot通常不会连接表达式求值产生的点(请参阅讨论和,以及gnuplot文档中的set datafile missing
)
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
# 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
# ...
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