1

hist.dat に保存されている、既に作成されているヒストグラム データを次のようにプロットしたいと思います。

#hist1
100
1
9
10
30
30
10
9
1

(0 行目はコメント)、最初の行にはヒストグラムの y 値の合計が含まれ、x 値は 1、2、... (行番号) です。したがって、正規化なしで使用できます

plot "hist.dat" every::1 using 0:1

そして、私が使用できる標準で

plot "hist.dat" every::1 using 0:($1/100)

問題は、合計値 (100) をどのように参照できるかです。正しい gnuplot コードを作成するためだけにファイルを先読みしたくないので、暗黙の値を書き留めたくないからです。私はすでに試しました

plot "hist.dat" using 0:($1/(columnhead+0))

ただし、列見出しは using 内で呼び出すことはできません (これは文字列であるため、int にするために 0 を追加しようとしました)。

ファイルを変更したり、このファイルに基づいて新しいファイルを作成したりしたくありません。適切な gnuplot コマンドを使用したいだけです。積算値を無視してgnuplotで再計算するのは避けたいです。


解決策: 正解を出す andyras によると、少し改善された方法は次のとおりです。

first(x) = ($0 == 0) ? (first = column(x), 1/0) : first

plot "hist.dat" using 0:($1/first(1))

したがって、複数の列がある場合は、これを使用してヒストグラムをプロットできます。

#hist1  hist2
10000   8000
1000    50
9000    70
1000    1100
3000    4500
3000    1200
1000    700
9000    380
1000    
4

1 に答える 1

2

合計値(100)を参照するにはどうすればよいですか?(ファイルを先読みせずに)

はい、gnuplot関数を使用します:

first(x) = ($0 == 0) ? (first = $1, 1/0) : first

plot "hist.dat" using 0:($1/first($1))

最初の行を読み取っている場合、関数はその行の値を変数に割り当て、first1/0を返します(gnuplotはそれを欠測データとして扱い、x範囲を拡張してそのポイントを含めることはありません)。それ以外の場合、関数はの値を返しますfirst

このように、を使用する必要はありませんevery ::1

ファイルを読み直してもかまわない場合は、statsコマンドを使用してファイル内の最大値を見つけることができます。

于 2012-12-25T22:30:51.433 に答える