とりあえず、GNUPLOTに関するメモ。
GNUPLOT tipsのwebは良くまとめられていると思う。

点の種類

使用できるポイントは、postscriptだと65種類のようだ。



#70から#75は、#64から#69と似ているが、黒線に白塗り(透過ではない)と固定されているっぽい。 #76, #77, #77...は#1, #2, #3 ...を繰り返している。

Test

  set term XXX  (XXXはお好みで)
  test
コマンドで、それぞれのterminalの点や線のサンプルが表示される。
因みに、postscriptの場合は以下の通り。

 

2色のフレーム

たまに見かけるフレームの一部だけ色が異なる図。
例えば下の図は次のようにして作ることができるよう。


set size square
set multi
set bmargin 3
set tmargin 3
set lmargin 6
set rmargin 6
set border 1+2+4 lt 7
set xrange [-10:10]
set xlabel "x"
set yrange [-10:10]
set ytics -10,2 nomirror
set ylabel "y=x" offset 2,0
p  x lt 7
set border 8 lt 1
unset xtics
unset xlabel
unset ytics
unset ylabel
set y2range [-1:1] norev
set y2tics -1,0.2 border textcolor lt 1
set y2label "y=-0.1*x" textcolor lt 1 offset -1,0
p  -0.1*x

"set border" というオプションでフレームの線種と色を変えることができる。
gnuplotでは、各辺にbitが割り当てられているので、指定したい数を加算して書式を決める。 plot(2D)では、上:1、左:2、上:4、右:8になっている。
つまり、例えば上下の枠を赤色にしたい場合は

set border 1+4 lt lc "red"

と指定する。
後は、multiplotを利用して、黒い枠と赤い枠をかく。marginを指定しておくとずれない。

labelコマンドを使って凡例を作成

凡例が2段にできないようなので、labelコマンドを使って凡例を作る。
Labelにはpoint等を打ち込むことができるのでこれを利用。

set label "Sample" at screen 0.175,0.9 point pt 1 lt 1 right offset -3.5,-0.1
Plotがlogスケールやだったり凡例(key)と合わせたりするかもしれないので、位置はscreenで指定する方が楽そう。
offsetで点と文字の位置調整ができる。
以下のように似せて作れる。


太い破線

Gnuplot/Postscriptでは線が太くなっても破線や点線の間隔が広がらないので潰れてしまう。
流石に困るので、Postscriptの以下の部分を編集する。
% Default Line Types
/LTw {PL [] 1 setgray} def
/LTb {BL [] LCb DL} def
/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
/LT0 {PL [] LC0 DL} def
/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
LTn nは0〜8はそれぞれline 1〜9に対応。 LTa はline 0、LTbはline -1に対応か。

上記部分の内、[]で囲まれた部分が実線や破線の感覚を決めている部分。 dl1が線を引くところ、dl2が空隙に相当する。
例えば[4 dl1 2 dl2]の場合は、長さ4の線と長さ2の隙間からなる線ができる。
gv等で確認しながら変更したい線の値を調整するとよい。
以下の図はline width 9の状態での実線及び破線の比較。 y=0.5*xが線種を変更して
[15 dl1 10 dl2]
の破線にした。y=2*xはデフォルトの破線(line type 2)


いろいろな記号・マーク

Postscriptではギリシャ文字を始め、色々な記号やマークを書くことができます。
ps_guide.ps (PC上のどこかにある筈。もしくは例えばこちら)に一覧があります。

軸、枠の調整

枠が細くて見えない場合等に調整します。
set border lw 2
で太くなります。数字を変えると太さが変わります。 また、
set border lt 2
とかすると線種を変えることができます。枠を消したいときは
unset border
とします。 また、枠を太くすると、メモリが潰れて見えにくくなるので、
set ytics scale 2.0
として、目盛の大きさを変えることができます(上記は規程値の2倍になっている)。 枠の太さを2.5倍、y軸の目盛の大きさを1.8倍に変えた場合の前後の図を以下に載せます。
 

日付のデータを別の軸に載せる

時系列のグラフを描くときにJDと日付を併用すると見やすい。
下のようなグラフを描くときの軸の設定方法:
set xrange [54300:55850]
set xlabel "JD - 2400000"
set x2data time
set timefmt "%Y/%m/%d"
set x2range ["2007/07/18":"2011/10/15"]
set format x2 "%Y.%m"
set xtics nomirror
set x2tics "2007/06",3600*24*365*5,"2012/06"	Scaleの幅は秒が単位
set x2tics add ("2007/08","2008/01","2008/07","2009/01","2009/07","2010/01","2010/07","2011/01","2011/07")
set mx2tics 60	mxtics (minor tics)は自動スケールされた目盛にしか適用されない

上で行っていることをかいつまんで説明すると、
1.2007/06と2012/06だけ自動でplot(間隔は5年分)…本当はうるう年を入れないといけないでしょうが。
2.適当な日付に目盛を追加
3.mx2ticsでは自動でplotした1.の目盛を60等分する(5年*12ヶ月)
になります。

Data set, block のこと

Gnuplot ではデータ行、データセット、データブロックに分けられる。
例えば、以下のようなデータがあった場合、それぞれは次のように定義される。
	#col1	#col2	#col3		行	セット	ブロック
	aaa	bbb	ccc		0	0	0
	ddd	eee	fff		1	0	0
(空行)
	iii	jjj	kkk		0	1	0
	lll	mmm	nnn		1	1	0
(空行)
(空行)
	rrr	sss	ttt		0	0	1
	uuu	vvv	www		1	0	1
	xxx	yyy	zzz		2	0	1
つまり、データセットは1行の空行、データブロックは2行の空行で分けられる。
データセットのカウントは、ブロックが変わるとリセットされる。

データ行、データセット、データブロックはそれぞれ『0列』『-1列』『-2列』に値が入る。つまり、

p "Datafile.dat" u 1
p "Datafile.dat" u 0:1
は同等。
"using" を用いる時にデータ行、データセット、データブロックの列を指定することは可能だが"$-1"のような表現はないので、column(-1)のようにして指定。
例えば、データブロックとデータセットの和を横軸にしたい場合は、
p "Datafile.dat" u (column(-1)+column(-2)):1
のようにする(そんなときはあるのかなぁ。。。)。

条件を付けてplot

ある条件を満たすデータだけプロットしたいときには、例えば
p "Datafile.dat" u 1:($2>0 ? $2: 1/0)
のようにする。
上の例では2列目の値が正のものだけプロット。

間引いてplot

X行飛ばし、とかX行からXX行までをplotとかする方法

everyを用いる。

plot "Datafile.dat" every i:I:s:S:e:E u 1:3 
で、それぞれ、 を指定する値が入る。指定しない場合は何も書かず、後ろのものは省略可能。以下、例。
plot "Datafile.dat" every 3 u 1:3		3行おきにプロット
plot "Datafile.dat" every :4 u 1:3		4ブロックおきにプロット
plot "Datafile.dat" every ::5::27 u 1:3 	5-27行目をプロット(実質6-28行目)
plot "Datafile.dat" every :::6::28 u 1:3	6-28ブロックをプロット(実質7-29ブロック)
plot "Datafile.dat" every ::5:: u 1:3	5行目からをプロット
plot "Datafile.dat" every ::::27 u 1:3	27行目までをプロット
plot "Datafile.dat" every 3::5::27: u 1:3	5-27行目を3行おきにプロット
plot "Datafile.dat" every :4::6::28 u 1:3	6-28ブロックを4ブロックおきにプロット

線の色指定

線や点の色を指定する方法。
p f(x) w lc rgb "color-name"
Gnuplotで予め設定されている色は以下の通り。尚、
show palette color
で色の名前とrgbの値が見ることができる。
■white■black■gray0■grey0■gray10■grey10
■gray20■grey20■gray30■grey30■gray40■grey40
■gray50■grey50■gray60■grey60■gray70■grey70
■gray80■grey80■gray90■grey90■gray100■grey100
■gray■grey■light-gray■light-grey■dark-gray■dark-grey
■red■light-red■dark-red■yellow■light-yellow■dark-yellow
■green■light-green■dark-green■spring-green■forest-green■sea-green
■blue■light-blue■dark-blue■midnight-blue■navy■medium-blue
■royalblue■skyblue■cyan■light-cyan■dark-cyan■magenta
■light-magenta■dark-magenta■turquoise■light-turquoise■dark-turquoise■pink
■light-pink■dark-pink■coral■light-coral■orange-red■salmon
■light-salmon■dark-salmon■aquamarine■khaki■dark-khaki■goldenrod
■light-goldenrod■dark-goldenrod■gold■beige■brown■orange
■dark-orange■violet■dark-violet■plum■purple