GNUPLOT

- not so Frequently Asked Questions -

update 2004/9/5

目盛あれこれ

目盛の表示を変えるには?

軸に描かれる目盛には,大きな目盛(major tics)と小さな目盛(minor tics)が あります.軸の数字は大きな目盛のある所に書かれます.デフォルトでは,小さな 目盛は対数プロットのときだけ描かれます.

大きな目盛の表示を変えるには, set {x|y}tics を使います.

gnuplot> set xtics 2
gnuplot> set ytics 0,200
gnuplot> plot x**3
fig/sample3.1a

X軸の目盛は増分だけを指定した場合で,目盛の数値は2づつ増加します. Y軸では目盛の初期値と増分を指定した場合で,0から200づつ増加します.Yが 0未満の部分には目盛が表示されません.set ytics 0,200,600 の様に終了値(600)を指示することもできます.


小さな目盛は, set m{x|y}tics を使い,大きな目盛を何分割 するかで与えます.上の例で,X,Yの目盛の間に中点を付けたい場合は, 次のようにします.

gnuplot> set mxtics 2
gnuplot> set mytics 2
fig/sample3.1b

目盛の数値は,任意の文字に置き換えることができます.X座標が 1から4までの4点で与えられてるデータがあるとして,この1から4 の位置に"April"や"May"等の別の文字を置くには,次のようにします.

gnuplot> set xtics ("April" 1, "May" 2, "June" 3, "July" 4)
gnuplot> plot "test.dat" using 1:2:3 notitle with boxes,\
"test.dat" using 1:2   notitle with lines
fig/sample3.1c

この様に,大目盛を変えてしまうと,小目盛をset mxtics で設定しても 無視され,小目盛は表示されません.


目盛の長さを変えるには,set ticscale を使います.数値を一 つ指定すると,大目盛の長さが,その数だけ倍されます.この時,小目盛は自 動的に大目盛の半分の長さになります.指定した数値が2つなら,2番目は小目 盛に適用されます.set ticscale 1 1 とすると,大目盛と小目盛の 長さは同じになります.

標準では,目盛は枠の内側に描かれます.これを外向きにするには, set tics out を使います.

up

対数プロットで,数値を10の冪乗で表示したい.

gnuplotの数値の表示のフォーマットは,デフォルト では "%g"です.対数グラフを描くとき,グラフの数値が適当な大きさ(0.0001 以上,100000以下)に入っていれば0.01, 1000等の"F"フォーマットの数値で表 示されますが,その範囲を越えると1e-05, 1e+06の様に"E"フォーマットに切 り替わります.

数値を10の冪で表示するには,set format で軸のフォーマットを "10^{%L}"に変更します.%Lの部分に10の指数が入ります.X windowの画面表示で は,添字を付けることはできませんので,出力をenhanced postscriptにしま す.

gnuplot> set format y "10^{%L}"
gnuplot> set terminal postscript eps enhanced
gnuplot> set ylabel "Y-AXIS" 2,0
fig/sample3.2 フォーマットをこの例の様に指定すると,y軸と軸名が離れすぎてしまうよう です.そのため,set ylabel のxオフセット のオプションを与えて,2文字分ほど軸名を右に寄せました.
up

数値の表示形式(format)を変えるには?

軸の数値の表示形式は,set format によって変えることができます. set format に続けて,フォーマットを指定する軸(X, Y, Z, XY, X2, Y2)を与え,さらにフォーマットの文字列を与えます.この文字列は,C言 語のprintfで使われるものと大体同じです.例えば,次の例は,X軸の数値を, 小数点以下3桁で,全体が10文字の長さで表示することを表します.

gnuplot> set format x "%10.3f"

%の後に,表示する全体の桁数と小数点以下の桁数を書きます. 6.2なら,全体を6桁,小数点以下を2桁表示することを表し,実際の 表示は,"5.00"のようになります.ここは,6や,.2だけ を書いても構いません.省略した方はデフォルトの桁数が使われます.

桁の表示に続いて,表示フォーマットを表すアルファベットを1文字 (f,e,E,g,x,X,o,t,l,s,T,L,S,c,P)与えます.デフォルトは"%g"で,数値が適 当な桁数の整数や小数で表せる範囲では"%.0f"で表示し,それ以外では"%e"フォー マットに自動的に切り替わります.f,e,x,oのフォーマットは以下のようになっ ています.eとE等の違いは,表示されるアルファベットが大文字か小文字かの 差です."%O"はgnuplotのマニュアルには存在しますが,実際には正しく働き ません(バグ?).

Format 意味 例 (_はblank)
f 小数点表示 %6.3f __6.00
e,E 指数表示 %11.4e _5.0000e+01
x,X 16進数表示 %x fffffffb
o,O 8進数表示 %o 37777766

t,l,T,Lは主に対数表示に関係します.y=exp(-x)+exp(x)という関数を [-10:10]の範囲でプロットする場合を考えます.Y軸の数値は大きく変化しま すが,最初は対数ではなくて普通のプロットをしてみます.formatによる表示 の変化が分かりやすいように,同時に数種類のformatで表示してみましょう.

gnuplot> set format y "%T %t %g"
gnuplot> plot exp(-x)+exp(x)
fig/sample3.3a

この様にformatを指定すると,Y軸に3種類の数字が書かれます.右から, "%T", "%t", "%g"に対応しています.この表示を見て分かるように,"%t"は実 際のY軸の数値の数字部分(仮数部)を表し,"%T"は10の冪乗(指数部)を表し ています.つまり,"%t"の部分をA,"%T"の部分をBとすると,"%g"で表現され る数値は,A x 10^Bとなっています.


次にこれを対数表示します.

gnuplot> set logscale y
gnuplot> replot
fig/sample3.3b

この様に,"%t"で表される部分は全て1になり,"%T"にはY軸の対数が入り ます.Y軸に指数を表示したければ,formatに"%T"を与えればよいわけです. また,Postscriptに出力する場合のように,上付の数値表示が出来るterminal であれば,"10^{%T}"とすることで,10の冪乗を表示することができます.


普通の対数プロットでは,tとl,TとLは全く同一になります.対数の底を 10では無く別のものにすると,これらの表示結果が異なります.tとTは,10を 底にした普通の対数プロット,lとLはset logscale axis baseで指定したときのものに対応しています.10以外の底を使った対数プ ロットをすることはあまり無いでしょうから,これらは同じものと考えても良 いでしょう.

formatは数値の表示方法を与えるだけではなく,色々な文字を入れること もできます.たとえば, set format x "%g km" のように指定すると,数字に続けて"km"という単位が表示されます.

up

目盛は残して,数字だけを消すには?

上の項目の応用で簡単にできます.

gnuplot> set format x ""
up

対数プロットで2や5のような間の数字を書きたい.

from Chriss in Univ. Tuebingen. Thanks !

対数プロットでは,軸の数値は10の冪乗の部分だけに書くのが普通ですが, 軸のレンジがそれほど広くない場合(例えば最大値と最小値の比が2桁程度の範 囲のとき) 2や5のような間の数字も書いておくと図が読みやすくなる場合があ ります.gnuplot では数字は set {x|y}tic で指定する大目盛の部 分だけに数字が書かれますので,中間部分に数字を書くにはここに大目盛を持っ て来る必要があります.対数目盛の場合は,書きたい目盛の位置を手で設定す る必要があります.

gnuplot> set logscale y
gnuplot> set yrange [1:50]
gnuplot> set ytics (1,2,5,10,20,50)
gnuplot> set format y "%2.0t{/Symbol \327}10^{%L}"
gnuplot> set lmargin 8
gnuplot> set terminal postscript eps enhanced
gnuplot> plot exp(x)/x
fig/sample3.5

set formatで指定したPostscriptのシンボルは・になります. ×にしたいときは{/Symbol \264}を使います.

ここで上げた方法は,システムによってはうまく行かない場合があるよう です.例えば50.0という数値を"%t"と"%L"のformatで表記するとき,5.0と1 (5.0E+01) という数字が得られれば良いのですが,場合によっては0.5と2 (0.5E+02) を返すようなシステムがあり,その場合は軸上の50という数値が 0x10^2と言うように変になってしまいます.対数グラフにゼロは無いはず.

up