0

次のような時間と値のログファイルがあります。

1 1
2 1
3 2
4 3
5 3
6 4
10 4
15 4
20 5
25 5 

それをプロットすると(with linesp)は次のようになります。

5|                                 ,----x---------x
4|         ,x-------x---------x---'
3|     ,x-x
2|   ,x  
1|x-x 
 |___________________________________________________
  1 2 3 4 5 6 _ _ _10 _ _ _ _15 _ _ _ _20 _ _ _ _25

ファイルに多くの値がある場合、左側のポイントは非常に混雑します(を使用する場合with linesp)。明確に定義されたステップサイズを設定するにはどうすればよいですか(混雑したタプルの一部をスキップします)。たとえば、5秒ごとに1つのタプルのみをプロットしたいとします。

5|                                 ,----x---------x
4|          ,-------x---------x---'
3|     ,--x'
2|   ,'  
1|--' 
 |___________________________________________________
  1 2 3 4 5 6 _ _ _10 _ _ _ _15 _ _ _ _20 _ _ _ _25

最後に、これらのまばらなタプルにエラーバーを追加したいと思います(現在、すべてのポイントにあります)。

4

2 に答える 2

1

おそらく gnuplot のインライン関数機能を使用してこれを行うことができますが、それはかなりトリッキーであり、それを変更したいと思ったとしても、それを機能させるために何をしたかを思い出すことはできません。代わりに、データをビン化/平均化するための単純な python スクリプトを提案します。

from collections import defaultdict
from sys import argv

d = defaultdict(list)
binsize = 5
with open(argv[1]) as f:
    for line in f:
        x,y = [int(xx) for xx in line.split()]
        d[x//binsize].append((x,y))

    for k,v in sorted(d.items()):
        xx,yy = map(sum,zip(*v))
        #print float(xx)/len(v),float(yy)/len(v)  #This version puts x value at average of x points in this bin
        print (k+0.5)*binsize, float(yy)/len(v)  #x value is in middle of bin.

最初の引数としてデータファイルが渡され、データが標準出力に出力されます (gnuplot のように)。次に、プロットファイルは次のようになります。

plot '< python cool_script.py datafile' u 1:2 w lp

まず、x 値がビンの中心にプッシュされたバージョン:

ここに画像の説明を入力

ビン内の他のすべての x 値から平均化された x 値を持つバージョン:

ここに画像の説明を入力

于 2012-11-09T20:07:22.707 に答える
0

あなたがここで何をしようとしているのか完全にはわかりません。整数の点があり、5 で割り切れる点にのみドットを配置したい場合は、非常に簡単に行うことができます。

plot 'foo.txt' u 1:2 w l, '' u (int($1)%5==0?$1:NaN):2 w p ls 1

ここでの魔法は、三項演算子で行われます。 (int($1)%5 == 0? $1:NaN)つまり、x 座標が (整数にキャストした後) 5 で割り切れる場合は点をプロットし、そうでない場合はプロットしません。

もちろん、データファイルの x ポイントが1,4,6,12プロットされない場合 (どれも 5 で割り切れない場合)、ちょっと困ったことになります。その場合は、他の投稿で使用したのと本質的に同じ手法を使用して、これらのポイントを補間する実際の基本的なスクリプトを作成できます。

于 2012-11-09T20:18:23.953 に答える