2

と の 2 つの列を持つデータ ファイルがXiありYiます。Xi(Yi-1 - Yi)/Yi-1forをプロットしたいと思いi>1ます。GNUPlot 直接でそれを行うことは可能ですか?

4

2 に答える 2

2

はい、gnuplot で直接可能です -- 簡単ではありません:

firstval = NaN
yi1(yi) = (returnval=firstval, firstval=yi, returnval)
plot "datafile" using 1:((yi1($2)-$2)/returnval)

インライン関数を使用する必要があります。インライン関数の形式は次のとおりです。

funcname(args,...) = (statement1,statement2,...,statementn, return_value)

ここでは、渡された最後の値を保持する関数を作成しました。yi1残念ながら、このソリューションは、using 仕様で 2 回呼び出すことができなかったため (2 回目は間違った戻り値を取得するため)、もう少し見苦しくなります。そのため、戻り値を保持する変数を直接参照する必要がありました。きれいではありませんが、機能します。$0(行番号) を渡して $0 が変更されたときにのみ更新することで、おそらく少し「きれいに」することができますが、このハックにはおそらく価値がありません。

于 2012-11-13T22:58:20.853 に答える
0

これを gnuplot で直接行うのはトリッキーです。問題は、計算で (i-1) 番目の要素を使用する必要があることです。gnuplot はこれを自動的に行うことができません。単純な計算を実行できますが、同じ行でのみ、たとえば次のようなものです

plot "datafile" using ($1):(($2-$1)/$2)

簡単でしょう。

何をする必要があるかについては、 octaveをお勧めします。または、スプレッドシート アプリケーションを使用してデータ ファイルを準備することもできます。

オクターブでは、次のようにプロットできます。

d = load("datafile")
plot(d(2:end, 1), d(1:end-1, 2)-d(2:end, 2)./d(1:end-1, 2))
于 2012-11-13T22:28:50.110 に答える