Processing math: 100%

gnuplot

描画ソフト gnuplot のこと

gnuplot について。

ベクトル場のプロット

ベクトル場のプロットを実現するためのスクリプトを作ってみた。

概要としては、パラメトリック表示を用いる。ただし、2 次元内のプロットであることを考慮する。xy の 2 つのパラメーターが必要なため、擬似的に 3 次元プロットの parametric 表示を用いてパラメーター数を増やしている (もっといい方法があれば教えて欲しい)。

手順は以下である。

  1. table を使ってまずは座標を書き出す: ### making tables ### の前半。z 座標は何でも良い (定数にするとプロットレンジのエラーが出るので適当に幅を持つ数がいいかも。エラーの出力を回避する方法が分からない。)。
  2. table を使ってベクトルの各成分を書き出す: ### making tables ### の後半。
  3. 適当な場所に書き出した 2 つのファイルを一つにくっつける: !paste ... (paste はシェルコマンドである。! を付けて、gnuplot 内からシェルコマンドを実行する。
  4. プロットする。

1gnuplot -persist < sample.gnu
等として実行する。ただし、-persist を付けておかないと、x11 での表示はすぐに消えてしまう。

01### output parameters ###
02#outputfile = "graph.eps"
03#outputfile = "graph.png"
04outputfile = "graph.svg"
05 
06### vector functios ###
07scale = 0.1
08vecx(u,v) = u/sqrt(u**2+v**2)
09vecy(u,v) = v/sqrt(u**2+v**2)
10 
11### ploting range ###
12set xrange[-6:6]
13set yrange[-6:6]
14 
15set urange[-5:5]
16set vrange[-5:5]
17 
18### visual ###
19set nokey
20set grid
21set size square
22 
23### sampling points ###
24set samples 101
25set isosamples 101, 11
26 
27### making tables ###
28set parametric
29set table '/tmp/position.dat'
30splot u, v, u+v
31 
32set table '/tmp/vector.dat'
33splot vecx(u,v), vecy(u,v), u+v
34 
35!paste /tmp/position.dat /tmp/vector.dat > /tmp/data.dat
36 
37unset table
38 
39### plot & save ###
40#set terminal post color eps enhanced 25
41#set terminal png
42set terminal svg
43set out outputfile
44plot "/tmp/data.dat" every 10:1 using 1:2:($5*scale):($6*scale) w vector lw 3
45 
46### view a plot in x11 ###
47set terminal x11
48plot "/tmp/data.dat" every 10:1 using 1:2:($5*scale):($6*scale) w vector lw 3
to the top