• ベストアンサー

gnuplotで複数の長さの関数の表示

実験データの比較のために、複数の長さのデータのグラフをひとつのグラフへ表示させようとしています。 この際、データが存在する部分だけにそれぞれのデータの理想値のグラフを関数で表示させたいのですが、それぞれの関数に対してそれぞれの範囲を指定する方法がわかりません。 例えば、 v(x)=4*x u(x)=2*x とした場合に、vは[0:3]の範囲で、uは[0:6]の範囲で表示させたい場合、どのようにして表示させればいいのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

・NaN 調べたら、4.2以降で定義された定数だそうです。 それ以前なら 「1/0」としてください。 ・"-" 特殊なファイル名で、入力ファイルを指定するところで使うと、それ以降のeだけの行までを入力ファイルの内容として取りこみます。 方法2は -text1ここから--- 0 3 -text1ここまで--- -text2ここから--- 0 6 -text2ここまで--- という二つのファイルを用意して plot "text1" using 1:(v($1)) w l,"text2" using 1:(u($1)) w l; とするのと同じことです。

参考URL:
http://takeno.iee.niit.ac.jp/%7Efoo/gp-jman/data/20050620/gp400-20050620.html#special-filenames
glarelance
質問者

お礼

あれ、自分のgnuplotは、 G N U P L O T Version 4.2 patchlevel 6 last modified Sep 2009 System: MS-Windows 32 bit と表示されているのですが、NaN使えないです。。。 なるほど、"-"っていう、特殊なファイル名があったんですねー とりあえず、NaNの部分を1/0に書き換えたらうまくいきました。 どうも有り難うございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

自信はありませんが、ちょっと考えてみました。 方法1) v(x) = ((0<= x)&&(x<=3))? 4*x : NaN ; u(x) = ((0<=x)&&(x<=6))? 2*x : NaN ; set xrange [0:6] #ここは適当に plot [0:6] v(x) , u(x); やってみたら、端がちょっと欠ける 方法2) v(x) = 4*x ; u(x) = 2*x ; plot "-" using 1:(v($1)) w l,"-" using 1:(u($1)) w l; 0 #v(x) のxの最小値 3 #v(x) のxの最大値 e 0 #u(x) のxの最小値 6 #u(x) のxの最大値 e v,uが直線なら、こんな方法も。 範囲の部分を別ファイルに用意しても可。 曲線なら、xの値を複数用意して smoothで滑かに。 方法3) set arrow 1 from 0,v(0) to 3,v(3) nohead set arrow 2 from 0,u(0) to 6,u(6) nohead これは線分のみ。凡例が出ないのでlabelと併用。

glarelance
質問者

お礼

解答有り難うございます。 ここ数週間物凄く忙しかったため、返信が非常に遅くなり申し訳ありません。 いくつか疑問なのですが、方法1のNaNは、私の方では undefined variable: NaN と出てくるのですが、これは、自分で何か定義しないといけないのでしょうか? 方法2についてなのですが、ここでplotしている"-"はどういう扱いとなっているのでしょうか? 存在しないファイル名を無理矢理指定している形でしょうか?それとも、ハイフンはgnuplot的に何か特殊な意味を持たせているのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A