在Gnuplot中的stats名称上循环

在Gnuplot中的stats名称上循环,gnuplot,Gnuplot,我在一个文件中有按块排列的数据。我想将每个块中的所有数据与块的平均值一起绘制为同一个图上的一条单独的线 我能够使用带有for循环的plot来显示数据 plot for [i=1:10] "F_vst.dat" every :::i::i u 1:2 w lines t i 但是当我尝试使用与 stats for [i=1:10] .... 它给了我一个错误,说for是一个未定义的变量 我尝试在do-for循环中编写统计数据,但不同的块需要不同的名称。我尝试了两种方法: d

我在一个文件中有按块排列的数据。我想将每个块中的所有数据与块的平均值一起绘制为同一个图上的一条单独的线

我能够使用带有for循环的plot来显示数据

plot for [i=1:10] "F_vst.dat" every :::i::i u 1:2 w lines t i
但是当我尝试使用与

stats for [i=1:10] ....
它给了我一个错误,说for是一个未定义的变量

我尝试在do-for循环中编写统计数据,但不同的块需要不同的名称。我尝试了两种方法:

do for [i=1:10] {
stats "F_vst.dat" every :::i::i u 2 name "F".i
}
plot for [i=1:10] "F_vst.dat" every :::i::i u 1:2 w lines t i, F.i_mean w dots
但是这给了我一个错误,说F是一个未定义的变量。第二种方法:

do for [i=1:10] {
stats "F_vst.dat" every :::i::i u 2 name "F"
plot "F_vst.dat" every :::i::i u 1:2 w lines t i, F_mean w dots
}
但这只绘制第一个块的数据,而不绘制其他块的数据


有更好的方法吗?

如果gnuplot>=5.2,那么我将把stats值简单地放在一个数组中。对于较旧的gnuplot版本也会有解决方案。请注意,数组中的索引从1开始,而数据块中的索引从0开始。 大概是这样的:

代码:

### statistics in a loop
reset session

# create some test data
set print $Data
do for [i=1:10] {
    do for [j=1:20] {
        print sprintf("%g %g", j, rand(0)+i)
    } 
    print ""
}
set print

array F[10]
do for [i=1:10] {
    stats $Data u 2 every :::i-1::i-1 nooutput
    F[i] = STATS_mean
}
set key out Left

plot for [i=1:10] $Data u 1:2 every :::i-1::i-1 w lp pt 7 lc i notitle, \
     for [i=1:10] F[i] w l title sprintf("Mean% 3d: %g",i,F[i]) lc i
### end of code
结果:

### statistics in a loop
reset session

# create some test data
set print $Data
do for [i=1:10] {
    do for [j=1:20] {
        print sprintf("%g %g", j, rand(0)+i)
    } 
    print ""
}
set print

array F[10]
do for [i=1:10] {
    stats $Data u 2 every :::i-1::i-1 nooutput
    F[i] = STATS_mean
}
set key out Left

plot for [i=1:10] $Data u 1:2 every :::i-1::i-1 w lp pt 7 lc i notitle, \
     for [i=1:10] F[i] w l title sprintf("Mean% 3d: %g",i,F[i]) lc i
### end of code