GNUPLOT

- not so Frequently Asked Questions -

update 2004/9/5

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

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

スケールの違う複数の軸を描きたい.

一つのグラフに,目盛が違う2つ以上の軸を付けたい場合があります.例 えば,横軸が温度のグラフで摂氏と絶対温度(K)を同時に目盛る場合や,経時 変化の目盛に分と秒を同時に書く場合などです.これをするには,幾つかの方 法が考えられます.例えば,multiplotを使っ て2つのグラフを重ねるとか,反対側の軸を使う などです.multiplotを使うと,以下のようなこともできます.

X軸を2つ作る方法を例にします.まず縦方向を少し縮小し,bottomの マージンを0にして,multiplotのモードに入ります.

gnuplot> set size 1.0,0.7
gnuplot> set bmargin 0
gnuplot> set yrange [0:5]
gnuplot> set multiplot

図を少し上に移動した後,最初のグラフを描きます.下の例では, y=exp(x)-1 という関数をプロットしています.X軸は「分」の単位を 持つとします.

multiplot> set origin 0,0.3
multiplot> set xrange [0:2]
multiplot> set xtics 1
multiplot> set xlabel "Time [min]"
multiplot> plot exp(x)-1 notitle

次に図を少し下げて,別の目盛でX軸だけを描 きます. 上のグラフと重ならないように, set noytics , set xtics nomirror 等を指定しておきます.最後に,枠だけを 描くために,グラフからはみ出してしまうような適当な関数をプロットします. ここではy=-1としました.

multiplot> set origin 0,0.15
multiplot> set xrange [0:120]
multiplot> set xtics nomirror 30
multiplot> set noytics
multiplot> set xlabel "Time [sec]"
multiplot> set border 1
multiplot> plot -1 notitle
multiplot> set nomultiplot
gnuplot>
fig/sample5.12

あまりスマートな方法とは言えませんが,実用上問題ないでしょう.2つ のX軸の間隔なども微調整しようとすると,色々と面倒です.実際にもっと綺 麗な図にしたいなら,普通にプロットしておいて,Tgifで別の軸を描き加える 方が良いでしょう.

up

任意の箇所に格子(grid)を描きたい.

set grid で描かれるグリッド(格子)は大目盛(tics)のあ る所に描かれますので,普通は等間隔です.これを任意の箇所に描くには, set tics を使って大目盛の位置を 調整します.

次の例では set xtics を使って,0.5, 1.2, 2.5 の3箇所に ticsを付け,そこにグリッドを描いています.

gnuplot> set xtics ("0.5" 0.5, "1.2" 1.2, "2.3" 2.3)
gnuplot> set grid
fig/sample5.13a

X軸では目盛を等間隔を保ったままで,グリッドの位置を変えるには, X2軸(上の軸)を使います. set x2tics を使ってグリッドを 入れる位置を決め, set grid のオプションでX2軸だけに グリッドを描くように指定します.

gnuplot> set xtics 0,1
gnuplot> set x2tics ("0.5" 0.5, "1.2" 1.2, "2.3" 2.3)
gnuplot> set grid noxtics x2tics
fig/sample5.13b

グラフの上に描かれる数字が煩わしいなら, set xtics "" 0.5 の様に文字列を空白にしておきます.但し,数字は描かれませんが,X2軸 の大目盛は残ってしまいます.

up