GNUPLOT

- not so Frequently Asked Questions -

update 2004/9/5

媒介変数表示のあれこれ

媒介変数表示について.

gnuplotで2次元関数を表示するときは,y=f(x)という形でy座標を表しますが, 媒介変数tを用いて.

   x = f(t)
   y = g(t)

のように媒介変数表示することもできます.この形式を用いることで,複雑 な関数をgnuplotに表示させることが可能になります.なお,2つの変数 u,vを用いて3 次元の曲面を表現する方法は 球面調和関数の項 で 説明しています.

媒介変数を用いてグラフを描くには,まず set parametric を用 いて,関数が媒介変数表示されていることを明示します. plot に続けて,x座標となる関数f(t)とy座標のg(t)を, plot f(t),g(t) のように与えます.

up

垂直線の描き方.

最も単純かつy=f(x)という関数型で表現できないのが,x=const.という垂直 の線です.この縦線は媒介変数tを用いると,

   x=const
   y=t

と書き,tを適当な範囲で変化させた場合に相当します.tの 範囲は set trange で設定できます.

gnuplot> set parametric

        dummy variable is t for curves, u/v for surfaces
gnuplot> const=3
gnuplot> set trange [1:4]
gnuplot> set xrange [0:5]
gnuplot> set yrange [0:5]
gnuplot> plot const,t
sampleQ2.1

この例ではx=3の所に垂直線を描いています. set trange [1:4] としていますので,線分のy座標は1から4までとなっています.もし trangeを設定しないなら,グラフの表示領域一杯に線が引かれま す.

up

円,正多角形の描き方.

円の媒介変数表示は,

   x=cos(t)
   y=sin(t)

で与えられ,tを0から2πまで変化させれば円が描けます.縦横比は, 綺麗な円になるように,固定しています.tの範囲は, plotコマンドのオプションで与えています.

gnuplot> set parametric

        dummy variable is t for curves, u/v for surfaces
gnuplot> set size square
gnuplot> set xrange [-1:1]
gnuplot> set yrange [-1:1]
gnuplot> plot [0:2*pi] cos(t),sin(t)
sampleQ3.1

上の図では,変数tは連続的に変化しているように見えますが,実際 にはtはある頻度で変化し,その変化の程度は set samples で決まります.defaultは100ですが, set samples 8 とす れば,gnuplotは0から2πの範囲で8つのtを発生してグラフを表示 し,結果として円は正七角形になります.つまり,正N角形を描きたければ, set samples N+1とすれば良いことになります.


sampleQ3.2

2次元関数の媒介変数表示は極座標で表示された 関数を表示するのに適しています.2次元極座標では変数として半径 rと偏角thetaが用いられますが,このthetaにパラ メータtを使います.半径rは角度の関数とし,r(t)tを用いると,任意の(x,y)座標は,次式の関係から計算できます.

   x=r(t)*cos(t)
   y=r(t)*sin(t)

円はr(t)=const.の特殊な例です.円の半径をtに比例するように変 化させれば,渦巻になりますね.

gnuplot> set xrange [-10*pi:10*pi]
gnuplot> set yrange [-10*pi:10*pi]
gnuplot> plot [0:10*pi] t*cos(t),t*sin(t)
sampleQ3.3

以下の例はr(t)=const*(1+cos(t))として描かれるCardioidです.

gnuplot> set parametric

        dummy variable is t for curves, u/v for surfaces
gnuplot> r(t) = 1+cos(t)
gnuplot> plot [0:2*pi] r(t)*cos(t),r(t)*sin(t)
sampleQ3.4
up

X軸とY軸を入れ換える.

関数表示は普通 y=f(x) と書かれますが,媒介変数を用いると x=f(y)のグ ラフを表示することができます.y=tと考え,xを媒介変数tの関数 f(t) で表現します.

gnuplot> set parametric

        dummy variable is t for curves, u/v for surfaces
gnuplot> c=2*pi
gnuplot> set size square
gnuplot> set trange [-c:c]
gnuplot> set xrange [-c:c]
gnuplot> set yrange [-c:c]
gnuplot> plot c*sin(t),t with lines, t,c*cos(t) with impulses
sampleQ4.1

2つのグラフを重ねて表示しています.一つは y=2pi*cos(x)で,緑の縞模様で 表示しました.もう一つは x=f(t)=2pi*sin(y)で赤の実線です.

with impulse は,グラフ上の点からY=0の軸に垂直に足を降ろし ます.ここの例で最初の赤の実線 x=2pi*sin(y) に対して with impulses を使っても,やはり垂直線(縦縞)になります.


up