gnuplot / plot (3)

2次元プロットのあれこれ (その3)

幾つかのグラフを一つにまとめて描きたい.

複数のグラフを描くには,gnuplotのmultiplotを使う方法と,個別の図を
EPSで作っておいて,TeX等を使って後でまとめ
る方法
があります.ここではmultiplotの使い方を説明します.

set multiplot とすると,マルチプロットのモードに入り,プ
ロンプトが multiplot> に変わります.このモードでは,plotコ
マンドで表示するたびに,新しい図が古い図に重なって表示されるように
なります.y=x, y=x*x, y=x*x*x の3つのグラフを順次重ね描きしてみましょ
う.

gnuplot> set multiplot
multiplot> plot x
multiplot> plot x*x
multiplot> plot x*x*x
multiplot> set nomultiplot

fig/sample5.10a

XやYの範囲を指定しないと,gnuplotが範囲を自動的に決めてしまうので,3
つのプロットの範囲がバラバラになり,めちゃくちゃな図になってしまい
ます.XとYの範囲を[-10:10]に固定してみましょう.凡例も重なってしま
うので, no key で消しておきます


gnuplot> set xrange [-10:10]
gnuplot> set yrange [-10:10]
gnuplot> set nokey
gnuplot> set multiplot
multiplot> plot x
multiplot> plot x*x
multiplot> plot x*x*x
multiplot> set nomultiplot

fig/sample5.10b

きれいに重なりました.でもこれだけのことなら,multiplotでなくとも,
普通のプロットで出来る事です.multiplotでは,個々の図を描く位置を毎回
少しづつ変えながら,元の図と重ならないようにして複数の図を一枚に入れて
しまうことができます

そのためには, set size set origin を使います.
sizeで個々の図をこれで縮小します.originは図を描く位置を指定するも
のです.0,0なら画面左下が図の左下と一致し,0.5,0.5なら,図の左下が
画面中央に来ます.


multiplotの例として,4つのリサージュ図形を一枚に入れてみましょう.
リサージュは,x=sin(n*t), y=sin(m*t)の2つの関数を媒介変数表示することで
描けます.ここでは,n=3,5,m=2,4と変えたものを作ってみましょう.

gnuplot> set parametric

dummy variable is t for curves, u/v for surfaces
gnuplot> set noxtic
gnuplot> set noytic
gnuplot> set nokey
gnuplot> set size square 0.3,0.3
gnuplot> set rmargin 0
gnuplot> set lmargin 0
gnuplot> set tmargin 0
gnuplot> set bmargin 0
gnuplot> set multiplot
multiplot> set origin 0.1,0.1
multiplot> plot sin(3*t),cos(2*t)
multiplot> set origin 0.1,0.5
multiplot> plot sin(3*t),cos(4*t)
multiplot> set origin 0.5,0.1
multiplot> plot sin(5*t),cos(2*t)
multiplot> set origin 0.5,0.5
multiplot> plot sin(5*t),cos(4*t)
multiplot> set nomultiplot
fig/sample5.10c

noxticとnoyticで目盛を非表示にしたり,4辺のmarginを0にしているのは,
4つの図の大きさを同じにするためです.

実際にmultiplotを使うと分かりますが,個々の図の正確な位置決めやサ
イズの調整は案外難しいものです.上の例の様に,長方形の画面に正方形の図
を配置する場合は,originに与える数値をcut-and-tryで調整する必要があり
ます.特に,個々の図に目盛や軸名が着いていると図の大きさがそれによって
変化してしまいますので,位置決めがさらに難しくなります.

up

格子(grid)を小目盛の所にも描きたい.

set grid でグリッド(格子)が描かれますが,
標準では大目盛(tics)のある所だけに
しか描かれません.小目盛を設定して,ここにもグリッドを描くには,次のようにします.

gnuplot> set mxtics 5
gnuplot> set mytics 5
gnuplot> set grid xtics ytics mxtics mytics

これで,大目盛を5分割した所にも格子が描かれます.set grid
部分を見てもらうとわかるように,xtics ... mytics の部分で,
どの目盛に格子を描くかを制御できます. set grid noxtics noytics
mxtics mytics
とすれば,小目盛の所だけに格子が描かれます(こん
な事する人は居ないでしょうが...)

up