我在几个文件中进行了一系列测量。每个文件都是这样的:
1 151.973938 144.745789 152.21991 17:57:14
2 151.995697 144.755737 152.21991 17:57:14
3 152.015747 144.765076 152.21991 17:57:14
.
.
.
我正在寻找计算几个文件中相同字段平均值的可能性。在过程结束时,我希望得到平均测量值的图表。
gnuplot可以吗?我自己无法在gnuplot中找到合适的选项。如果没有,你会推荐哪种不同的方法?
最好的问候,Juuro
答案 0 :(得分:3)
你无法在gnuplot中完成所有工作。 Gnuplot仅限于一次处理一个文件中的列。您需要一些其他实用程序来预处理数据。假设数据采用您演示的格式(使用空格而不是分号),此脚本将采用第二列,第三列和第四列的平均值,并吐出第一列和第五列相同的文件,并对中间点进行平均。在只有您要处理的.txt
文件的目录中运行此bash脚本。
#!/bin/bash
sum=$(ls -l *.txt | wc -l)
paste -d" " *.txt | nawk -v s="$sum" '{
for(i=0;i<=s-1;i++)
{
t1 = 2+(i*5)
temp1 = temp1 + $t1
t2 = 3+(i*5)
temp2 = temp2 + $t2
t3 = 4+(i*5)
temp3 = temp3 + $t3
}
print $1" "temp1/s" "temp2/s" "temp3/s" "$5
temp1=0
temp2=0
temp3=0
}'
从gnuplot内部,你可以像这样运行脚本:
!myscript.sh > output.out
plot 'output.out' u 1:2 # orwhatever
或者像这样:
plot '<myscript.sh' u 1:2
(代码的灵感来自我发现的here。)
答案 1 :(得分:2)
我认为使用gnuplot是不可能的。我首先会创建一个执行平均的脚本并将结果打印到stdout。假设此脚本名为average.py:
plot '<average.py FILE1 FILE2 FILE3' w l
脚本average.py可以看起来像这样。
#!/usr/bin/python
from numpy import loadtxt,mean,ones
import sys
#number of files:
nrfiles=len(sys.argv[1:])
#just to get the dimensions of the files
data=loadtxt(str(sys.argv[1]))
rows=data.shape[0]
cols=data.shape[1]
#initialize array
all=ones((int(nrfiles),int(rows),int(10)))
#load all files:
n=0
for file in sys.argv[1:]:
data=loadtxt(str(file))
all[n,:,0:cols]=data
n=n+1
#calculate mean:
mean_all=mean(all,axis=0)
#print to stdout
for i in range(rows):
a=''
for j in range(cols):
a=a+str('%010.5f ' % mean_all[i,j])
print str(a)
此脚本的限制是所有文件必须具有相同的数据结构