- not so Frequently Asked Questions - update 2004/9/5
|
|
not so FAQ |
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 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 きれいに重なりました.でもこれだけのことなら,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 noxticとnoyticで目盛を非表示にしたり,4辺のmarginを0にしているのは, 4つの図の大きさを同じにするためです. 実際にmultiplotを使うと分かりますが,個々の図の正確な位置決めやサ イズの調整は案外難しいものです.上の例の様に,長方形の画面に正方形の図 を配置する場合は,originに与える数値をcut-and-tryで調整する必要があり ます.特に,個々の図に目盛や軸名が着いていると図の大きさがそれによって 変化してしまいますので,位置決めがさらに難しくなります. 格子(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 とすれば,小目盛の所だけに格子が描かれます(こん な事する人は居ないでしょうが...) |