4

いくつかのファイルに一連の測定があります。すべてのファイルは次のようになります。

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 で適切なオプションを自分で見つけることができませんでした。そうでない場合、それを達成するためのどの別の方法をお勧めしますか?

よろしく、十郎

4

2 に答える 2

4

gnuplot ですべてを行うことはできません。Gnuplot は、一度に 1 つのファイルから列を処理することに制限されています。データを前処理するには、他のユーティリティが必要です。データが示した形式 (セミコロンの代わりにスペースを使用) であると仮定すると、このスクリプトは 2 番目、3 番目、および 4 番目の列の平均を取得し、1 番目と 5 番目の列が同じで、中央が平均されたファイルを吐き出します。.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

(ここで見つけたものに触発されたコード。)

于 2012-05-30T15:03:24.830 に答える
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)

このスクリプトの制限は、すべてのファイルが同じデータ構造を持つ必要があることです

于 2012-05-30T14:42:19.187 に答える