- not so Frequently Asked Questions - update 2004/9/5
|
|
not so FAQ |
2次元プロットのあれこれ (その6)表示方法の異なる2つの図を横または縦に並べる.同じデータの図を,表示方法を変えて,横または縦に並べる方法を紹介します. 次のような場合に,このような表示が役に立ちます.
同じデータを表示スケールを変えて横に並べる.左のようなデータがあるとします.ここでの表示範囲は,[0:30]となってい ますが,Xが0に近い場所に意味があり,ここをより詳細に見せたい場合が あります.2つの図を異なるスケールで描けば良いのですが,これを1つの 図にまとめる方法を考えます.まず,Xが1以下の領域を対数表示します. gnuplot> set log xy gnuplot> set xrange [ 0.001 : 1 ] gnuplot> set yrange [ 0.1 : 5000 ] gnuplot> set xlabel "Energy [eV]" Xが[1:30]の領域はlinear scaleで表示し,1以下の対数表示の図の横に multiplotを使って並べます.左右の図をぴったりとくっつける ために,左側ではrmarginをゼロにし,右の図では lmarginをゼロにします.2つの図の横幅を半分にしておき, set originを用いて右の図を0.5だけ右に移動します. 左側の図にはY目盛を入れるため, set lmargin 10 としてY軸の 数字を書く10文字分の領域を確保していますが,右側の図には数字を入れ ないのでlmarginをゼロにします.また 数字を消すために set format ""を指定します. gnuplot> set multiplot multiplot> set size 0.5,1 multiplot> set origin 0.0,0.0 multiplot> set lmargin 10 multiplot> set rmargin 0 multiplot> plot "calc.dat" u 1:2 w l multiplot> set origin 0.5,0.0 multiplot> set format y "" multiplot> set lmargin 0 multiplot> set rmargin 2 multiplot> set nolog x multiplot> set xrange [1:30] multiplot> set xtic 0,10 multiplot> set mxtic 5 multiplot> plot "calc.dat" u 1:2 w l multiplot> set nomultiplot gnuplot> 左側と右側のスケールが違うことを明確にするために,X軸にはminor tics をいれておくべきです.また,繋ぎ目でのXの目盛の数値が重なってしまわ ないように,右の図ではset xtics 0,10(初期値0,増分10)とし てX=1のところに目盛が入らないようにしました. 実は,このデータはXが小さい場合にlog-logで直線になることが分かってい ます.上の図と比較するとわかるように,表示領域を2つにわけることで, このようなデータの特徴を端的に表現することが可能になります. この例ではX軸名が2つ表示されますが,2つの図の真中近辺に1つだけ表示さ せることもできます.左の図では set xlabel ""のように軸名 を消しておき,右側の軸名を set xlabel "Energy [eV]" -20,0 のように左にずらします.この時,両方の図で, set bmargin 5 のように下部のマージンを明示しておかないと,軸名を消した方の図の縦 の長さが変わってしまいます. 2つの似通ったデータを絶対値と比で比較する.非常に似通った2つのデータを比較検討するには,絶対値での比較の他にそ れらの比を取ったものをプロットするのが効果的です.同じX座標でのY値 の比なので,今度は上下に図を重ねてみます.絶対値での比較は対数表示, 比は通常の目盛を使います. 2つのデータのX座標を揃えておかないと,比を計算することはできませんの で,データファイルには,1カラム目にX座標,2カラムが最初のデータのY 座標,3カラム目が2番目のデータのY座標が入っているものとします. 最初に設定するのは,上下の図に共通なX軸関係のパラメータです.ここで は,[0.01:30]の範囲を対数表示を用いてプロットします.上下の図の大き さをそろえるために,leftとrightのマージンを明示しています. gnuplot> set xrange [ 0.01 : 30 ] gnuplot> set nokey gnuplot> set log x gnuplot> set xtics 10 gnuplot> set mxtics 10 gnuplot> set lmargin 10 gnuplot> set rmargin 2 まず下側の図を作ります.下には2つのデータの比をとったものを,縦サイ ズを0.4に縮小して表示します.Y軸の範囲は0.5から1.5とし,目盛は0.6か ら0.2刻みで1.4まで入れます.X軸名は下の図に入れるので, set bmargin で軸名のスペースを確保します.また,上の図と接触させる ために, set tmargin 0 で上部の余白を無くします.2つのデー タは2,3カラムにあるので,その比をプロットするには plot 1:($2/$3) となります.Y=1を入れておくと,比のデータはより読み やすくなります. gnuplot> set multiplot multiplot> set yrange [ 0.5 : 1.5 ] multiplot> set ytic 0.6,0.2,1.4 multiplot> set ylabel "Ratio" multiplot> set size 1,0.4 multiplot> set xlabel "Energy [eV]" multiplot> set origin 0.0,0.0 multiplot> set bmargin 3 multiplot> set tmargin 0 multiplot> plot 1 w l 0,"cross.dat" u 1:($2/$3) w l 1 次に上半分を作ります.下と同様にサイズを縮小した後,下の図の左上に移 動に原点を移動します.上側では,2つのデータを絶対値の対数で表示して います.set bmargin 0で下の図と接触させます.その時,X軸名 や数字は消しておく必要があります. multiplot> set log xy multiplot> set yrange [ 0.1 : 5000 ] multiplot> set ytic 0.1,10 multiplot> set ylabel "Cross Section [b]" multiplot> set size 1,0.6 multiplot> set origin 0.0,0.4 multiplot> set bmargin 0 multiplot> set tmargin 1 multiplot> set format x "" multiplot> set xlabel "" multiplot> plot "cross.dat" u 1:2 w l,"" u 1:3 w l multiplot> set nomultiplot gnuplot> ここでは凡例を消していますので,比のデータがA/Bなのか,B/Aなのかはす ぐには分かりません.必要があります.上半分の図を見れば,赤い線が緑 線より低いので,下のratioは赤/緑であることは明らかですが,やはりこ れはcaption中に明記する必要があります. EPSに出力した完成品がGalleryにあります. |