GNUPLOT

- not so Frequently Asked Questions -

update 2004/9/5

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

1 | 2 | 3 | 4 | 5 | 6 | 7

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

複数のグラフを描くには,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