と の 2 つの列を持つデータ ファイルがXi
ありYi
ます。Xi
対(Yi-1 - Yi)/Yi-1
forをプロットしたいと思いi>1
ます。GNUPlot 直接でそれを行うことは可能ですか?
質問する
356 次
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 に答える