Gnuplot脚本平均多个文件

时间:2012-05-30 14:10:39

标签: graph visualization gnuplot

我在几个文件中进行了一系列测量。每个文件都是这样的:

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

2 个答案:

答案 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)

此脚本的限制是所有文件必须具有相同的数据结构