label-> 1 2 3 4 5
val1 1.67E+07 2.20E+07 3.04E+07 7.89E+07 1.24E+08
val2 1.71E+07 2.35E+07 2.70E+07 7.80E+07 1.31E+08
val3 1.48E+07 2.15E+07 2.74E+07 7.18E+07 1.17E+08
val4 1.57E+07 2.07E+07 2.49E+07 7.46E+07 1.27E+08
val5 1.32E+07 2.23E+07 3.07E+07 7.50E+07 1.16E+08
mean 1.55E+07 2.20E+07 2.81E+07 7.57E+07 1.23E+08
有可能在gnuplot中执行此操作,或者我应该与Excel息息相关?
您可以使用
awk
和
gnuplot
来做到这一点。假设您的示例数据(无行)在
mean
data.txt
)和第二行开始计算每列中的平均值(记录,或行,#1 -
i=2
->不要汇总,但填充辅助阵列NR==1
与零:a
)。为此,人们可以使用a[i]=0.0
条件:awk
。
if (NR==1)... else {...calculate the means...}
读取数据行。在每一行中,您迭代字段,并将数字Awk
列的数据汇总到数组元素i
::
a[i]
当迭代第一行(
{for(i=2;i<=NF;i++) a[i]+=$i;}
)时,我们会; 在
NR==1
脚本的
END
(所有处理行)上,只需除以数据中的列数即可计算平均值。注意,下面的代码假定您具有矩形形式的数据(awk
= const)。
也,将行列标签保存到
NF-1
阵列:
NF
然后将标签和平均值打印到行中,一个标签的一行。
label
最终数据表将以这种方式看:
if (NR==1) {for(i=2;i<=NF;i++) label[i]=$i; ... }
然后您可以将一列绘制在另一列上。 请注意,GNUPLOT的最终数据应格式化列,而不是行。 以下代码执行所述操作:
for(i=2;i<=NF;i++) {printf label[i]" "; print a[i]/(NF-1)}
注意,应用后斜切角色1 15500000
2 22000000
3 28080000
4 75660000
5 123000000
gnuplot> unset key
gnuplot> plot "<export LC_NUMERIC=C; awk '{if (NR==1) {for(i=2;i<=NF;i++) label[i]=$i; a[i]=0.0;} else {for(i=2;i<=NF;i++) a[i]+=$i;};} END {for(i=2;i<=NF;i++) {printf label[i]\" \"; print a[i]/(NF-1)}};' data.txt"
\
gnuplot-lyly
版本。使用gnuplot
在do for
循环中计算均值,然后将值存储在字符串中。检查
stats
和
help do
。
help stats
SO31878011.dat
script:(2014年2月的GNUPLOT> = 4.6.5)
label-> 1 2 3 4 5
val1 1.67E+07 2.20E+07 3.04E+07 7.89E+07 1.24E+08
val2 1.71E+07 2.35E+07 2.70E+07 7.80E+07 1.31E+08
val3 1.48E+07 2.15E+07 2.74E+07 7.18E+07 1.17E+08
val4 1.57E+07 2.07E+07 2.49E+07 7.46E+07 1.27E+08
val5 1.32E+07 2.23E+07 3.07E+07 7.50E+07 1.16E+08
恢复: