GNUPLOT

- not so Frequently Asked Questions -

update 2005/11/19

その他もろもろ (その4)

1 | 2 | 3 | 4

多くの線種を使う図

一つの図の中に沢山の線をひき,それらを区別したい場合があります.し かしながら,gnuplotで表示できる線の種類はterminal毎に違うため,一度に 何種類の線がひけるかはterm次第です.線種を区別するには,以下のような 属性を組合せることで可能です.

 種類 (実線・点線・一点鎖線等)
 太さ (細線・太線)
 色
 線と記号の同時表示

terminalによっては点線が描けなかったり,太さが変えられなかったりし ますので,組合せの数はあまり多くないかもしれません. 以下にpostscript を用いて線種の数をかせぐ方法の一例を示します.

表示する線の種類を指定するために, set linestyle で予めい くつかの線種を定義しておきます.gnuplot ver.4の場合は set style line とします.ここでは実線(postscript terminalの1番 の線),破線(同2番),点線(3番),一点鎖線(6番)の4種を用い,それぞれに対 して太い線(width 3)と細い線(width 1)を用います.これで8種類の線種が定義 されます.下の例では,正弦を細い線で,余弦を太い線で表示しています.

gnuplot> set term postscript eps enhanced
gnuplot> set linestyle 1 lt 1 lw 1
gnuplot> set linestyle 2 lt 2 lw 1 
gnuplot> set linestyle 3 lt 3 lw 1 
gnuplot> set linestyle 4 lt 6 lw 1 
gnuplot> set linestyle 5 lt 1 lw 3 
gnuplot> set linestyle 6 lt 2 lw 3 
gnuplot> set linestyle 7 lt 3 lw 3 
gnuplot> set linestyle 8 lt 6 lw 3
gnuplot> set xrange [-pi:pi]
gnuplot> plot sin(  x) w l ls 1, sin(2*x) w l ls 2, \
              sin(3*x) w l ls 3, sin(4*x) w l ls 4, \
              cos(  x) w l ls 5, cos(2*x) w l ls 6, \
              cos(3*x) w l ls 7, cos(4*x) w l ls 8
fig/sample9.6a

線種を変えればもう少し多くの線を区別して表示することが可能ですが, これら4種以外は判別が難しいかもしれ ません.また,太さを変える場合は,太/細の2種類にとどめておいた方が良い と思います.太さの違う線は,印刷されたものをコピーを取っているうちに判 別が付きにくくなります.

描こうとしている図にもよりますが,実用的には10種類程度の線種を混ぜ て表示するのが限界でしょう.通常は同時に表示する線はせいぜい5,6種類に しておかないと,図が非常に見にくくなります.沢山の線を区別する必要があ るなら,色を併用したほうが良いです.

fig/sample9.6b

上に書いてある「線と記号の同時表示」とは,線に重ねて記号を表示する 方法です.記号の種類を変えることで線の数を増やせます.

gnuplot> set linestyle 1 lt 1 lw 3 pt 5
gnuplot> set linestyle 2 lt 1 lw 3 pt 6

このように線と記号の種類を同時に定義しておき,プロットする際に plot sin(x) w lp ls 1 (lpはlinespointsの略)とします.た だし,この方法は記号を表示する間隔を制御するのが難しいという欠点があり ます.データファイルの中身をプロットする場合は,データのある点だけに記 号が描かれ,点の間は直線で結ばれます.一方,上の例のように関数をプロッ トする場合は, set sampling で決められた間隔(defaultでは全区 間を100等分)で記号が描かれます.

up

最小自乗法で得られたパラメータ数値を図に書き込む

最小自乗fitを行って得られたパラメータの数値を,図のラベルとして書き込みます. fit コマンドでまず数値を求め, set label "A=%g",a のように ラベルを定義すると,指定されたフォーマットでラベルの文字が作られます.

gnuplot> f(x)=a*x*x+b*x+c
gnuplot> fit f(x) 'test.dat' using 1:2:3 via a,b,c
gnuplot> set label 1 "Y=AX^2+BX+C" at 11,1225
gnuplot> set label 2 "A = %g", a at 12,1200
gnuplot> set label 3 "B = %g", a at 12,1180
gnuplot> set label 4 "C = %g", a at 12,1160
gnuplot> plot f(x),'test.dat' using 1:2:3 with yerr
fig/sample9.7
from Joerg in Switzerland. Thanks !
up