Moving Average for Gnuplot
Moving average implementation with variable number of averages.
n = 100
do for [i=1:n] {
eval(sprintf("back_n%d=0", i))
}
shift = "("
do for [i=n:2:-1] {
shift = sprintf("%sback_n%d = back_n%d, ", shift, i, i-1)
}
shift = shift."back_n1 = x)"
sum = "(back_n1"
do for [i=2:n] {
sum = sprintf("%s+back_n%d", sum, i)
}
sum = sum.")"
samples(x) = \$0 > (n-1) ? n : (\$0+1)
avg_n(x) = (shift_n(x), @sum/samples(\$0))
shift_n(x) = @shift
plot "test.data" using 1:2 w l notitle, \
"test.data" using 1:(avg_n($2)) w l lc rgb "red" lw 3 title "avg\\_".n
Source: https://stackoverflow.com/a/42868056/494725