Gnuplot 求列的平均值

Gnuplot 求列的平均值,gnuplot,average,Gnuplot,Average,我对这个论坛很陌生 我对gnuplot脚本有问题。我希望程序从一个文件中读取数据,并对一列中的数据取平均值,但只取后续两行的平均值 这是我的数据文件的一个示例: 10972710;0;97;11699;75114829;14017;62910343;4294966568;71227698;4294690030;17218646 10972710;1;98;4294694062;75242152;4294781521;62921071;4294614770;71144038;4294733461;

我对这个论坛很陌生

我对gnuplot脚本有问题。我希望程序从一个文件中读取数据,并对一列中的数据取平均值,但只取后续两行的平均值

这是我的数据文件的一个示例:

10972710;0;97;11699;75114829;14017;62910343;4294966568;71227698;4294690030;17218646
10972710;1;98;4294694062;75242152;4294781521;62921071;4294614770;71144038;4294733461;18276743
10972710;0;99;117245;75164467;4294946663;62862643;49062;71038638;4294745782;17886802
10972710;1;100;4294799584;75123654;4294686842;63040946;4294609337;71224369;4294706709;17333245
10972710;0;101;1845;75045355;46741;62966683;72313;71243339;4294713057;18914555
10972809;1;102;4294963298;75210462;59798;63318000;4587;71262619;70880;19513152
10972809;0;103;4294957708;75074862;33562;63074526;189991;71061923;39240;18642066
例如,关注第4列,我想对第1行与第2行进行平均,第3行与第4行进行平均,依此类推。gnuplot中是否有一些内置函数,或者我是否必须编写自己的函数

非常感谢你


Tommaso

使用gnuplot可以对相邻行执行一些简单操作:必须使用
using
语句中的赋值保存一行的值,并且仅每隔一秒绘制一次点:

set datafile separator ';'
prev = curr = 0
plot 'test.txt' using (int($0)/2):(prev = curr, curr = $4, int($0)%2 == 1 ? (curr - prev)/2.0 : 1/0) with linespoints
using语句的工作原理如下:首先将前一行的值(此时仍在
curr
中)分配给变量
prev
,然后将当前行的值分配给
curr
,最后在奇数行(行从0开始)上进行平均,或者用
1/0
给出无效的分数

版本5.0的结果是

如您所见,虽然我指定了
linespoints
,但您只得到了点。无效的
1/0
使gnuplot中断此处的行,因此不绘制任何行

使用gnuplot 5.0,您可以将过滤结果保存到一个临时文件(或者保存到一个herdoc结构,
$avg
)中,并通过第二次调用打印处理过的数据:

set datafile separator ';'

prev = curr = 0

set table $avg
plot 'test.txt' using (int($0)/2):(prev = curr, curr = $4, int($0)%2 == 1 ? (curr - prev)/2.0 : 1/0) with lp pt 7
unset table

set datafile separator whitespace
plot $avg using 1:2 w lp
请注意,这在4.6版中不起作用,因为这个版本对解析内部带有
NaN
的数据文件有不同的处理,就像gnuplot生成的一样

最后,您还可以使用外部工具(如
awk
)为您进行处理,如

plot '< awk -F";" "{if (NR%2 == 0) { printf \"%.10e\n\", (\$4-prev)/2.0 }; prev = \$4}" test.txt' using 0:1 with linespoints
plot“
访问gnuplot中的两个不同行并不是那么简单。如果计算第一行和第二行第四列的平均值,那么x值应该是多少?目前我使用的是第一列,但实际上我并不关心x值。我可以把一个累进索引放在平均值上,然后用它作为x值。