矢印の描画と矢印のスタイル

矢印の描画

gnuplotではset arrowコマンドを使ってグラフ上に矢印を描画することが出来ます。以下に例を示します。

set xrange [-10:10]
set yrange [-10:10]
set arrow 1 from 0,9 to 0,-9
plot -cos(x/10.0*pi)*10.0 notitle

この例では(x,y)=(0,9)の点から(0,-9)の点に向かって矢印を引いています。実行例は下図のようになります。なお、set arrowの後の数字の1は矢印の番号で、1以上の任意の整数で指定できます。この番号は矢印を消したり上書きする際に必要になります。

矢印を複数描画したい場合は複数のset arrowコマンドを使用しますが、そのとき異なった番号を指定します。二つのset arrowコマンドで同じ番号を使用すると、後のset arrowコマンドで指定した矢印のみが描画されることになります。

set xrange [-10:10]
set yrange [-10:10]
set arrow 1 from 0,9 to 0,-9
set arrow 2 from -9,0 to -1,0
plot -cos(x/10.0*pi)*10.0 notitle

矢印の位置

矢印の位置はfrom **,**およびto **,**で指定します。fromで指定した座標からtoで指定した座標へ向かって矢印を引きます。また、toの代わりにrto **,**というキーワードもあり、これを用いるとfromで指定した座標から相対的に矢印の終点を指定できます。

これらの座標**,**の指定には幾つかのオプションがあります。これまでの例のようにただx座標とy座標を並べるかfirst **,**という指定をすると、プロットされている関数/データのx,y座標に対して矢印の始位置と終位置をしていできます。graph **,**という指定方法ではグラフの左下を(0,0)、右上を(1,1)とする座標に対して矢印の位置を指定します。他に、描画領域の左下を(0,0)、右上を(1,1)とする座標系に対して指定するscreen **,**という方法や、x2,y2座標に対して指定するsecond **,**があります。

なお、たとえばfrom graph 0.5, screen 0.1のようにxとyで別々の指定方法を適用することもできます。また、fromtortoで指定方法が混在していてももちろん構いません。

これらの座標の使い方の具体例に関しては「ラベルの座標」を参照してください。

矢印のスタイルの変更

上の例からも明らかなように、残念ながらデフォルトの矢印はあまりかっこいいものとは言えません。矢印の形状はset style arrowを使用して細かく設定でき、set arrowコマンド中でarrowstyle *として設定した形状を使用することが出来ます。なお、arrowstyleasと略記が可能です。

例えば、以下のようなスクリプトを実行します。このスクリプトでは、set style arrow 1 ...の部分で矢印のスタイル1を設定しています。設定した内容をset arrow内のarrowstyle 1で呼び出しています。設定の詳細については後述します。

set style arrow 1 size character 2,20 filled linewidth 2
set xrange [-10:10]
set yrange [-10:10]
set arrow 1 from 0,9 to 0,-9 arrowstyle 1
plot -cos(x/10.0*pi)*10.0 notitle

すると、今度は下図のように矢印のスタイルが変わります。

設定の細かい意味は以下のとおりです。まず、size character 2,20の部分では矢印の頭の部分の大きさと角度を指定しています。この例では「頭の大きさは文字の2倍の大きさで、先端の角度は20度」という設定をしています。大きさの指定は他にgraph *(グラフのx軸の長さを1とする)やscreen *(描画領域の横の長さを1とする)などの指定方法が使用できます。また、3つ目の引数を指定することもでき、その場合は頭の根元の角度が指定されます。filledは矢印の頭を塗りつぶすオプションで、塗りつぶさない場合は代わりにemptyと指定します。linewidth 2は線の太さを通常の2倍にしています。

他の矢印の例は以下をご覧下さい。パラメーター次第でかなり色々な矢印が描けるのがお分かりいただけると思います。

この図は以下のスクリプトを使って生成したPostScriptファイルarrow_style_test.epsを切り取ったものです。

set style arrow  1 size graph 0.02,20      filled linewidth 2
set style arrow  2 size graph 0.02,20      empty  linewidth 2
set style arrow  3 size graph 0.02,20      filled nohead linewidth 2
set style arrow  4 size graph 0.02,20      filled heads linewidth 2
set style arrow  5 size graph 0.02,20      filled backhead linewidth 2
set style arrow  6 size graph 0.02,20      filled linewidth 5
set style arrow  7 size graph 0.02,20      filled linewidth 2 linetype 2
set style arrow  8 size graph 0.02,20      filled linewidth 2 linecolor rgb "purple"
set style arrow  9 size graph 0.02,20,50   filled linewidth 2
set style arrow 10 size graph 0.02,20,150  filled linewidth 2
set style arrow 11 size graph 0.02,90      linewidth 2
set style arrow 12 size graph 0.02,150,50  linewidth 2
set style arrow 13 size graph 0.02,150,50  filled linewidth 2
set style arrow 14 size graph 0.02,150,170 filled linewidth 2

set arrow  1       from 0.1,1.0  to 0.3,1.0 
set arrow  2 as  1 from 0.1,0.94 to 0.3,0.94
set arrow  3 as  2 from 0.1,0.88 to 0.3,0.88
set arrow  4 as  3 from 0.1,0.82 to 0.3,0.82
set arrow  5 as  4 from 0.1,0.76 to 0.3,0.76
set arrow  6 as  5 from 0.1,0.70 to 0.3,0.70
set arrow  7 as  6 from 0.1,0.64 to 0.3,0.64
set arrow  8 as  7 from 0.1,0.58 to 0.3,0.58
set arrow  9 as  8 from 0.1,0.52 to 0.3,0.52
set arrow 10 as  9 from 0.1,0.46 to 0.3,0.46
set arrow 11 as 10 from 0.1,0.40 to 0.3,0.40
set arrow 12 as 11 from 0.1,0.34 to 0.3,0.34
set arrow 13 as 12 from 0.1,0.28 to 0.3,0.28
set arrow 14 as 13 from 0.1,0.22 to 0.3,0.22
set arrow 15 as 14 from 0.1,0.16 to 0.3,0.16

set label  1  at 0.35,1.0  "default"
set label  2  at 0.35,0.94 "size graph 0.02,20      filled linewidth 2"
set label  3  at 0.35,0.88 "size graph 0.02,20      empty  linewidth 2"
set label  4  at 0.35,0.82 "size graph 0.02,20      filled nohead linewidth 2"
set label  5  at 0.35,0.76 "size graph 0.02,20      filled heads linewidth 2"
set label  6  at 0.35,0.70 "size graph 0.02,20      filled backhead linewidth 2"
set label  7  at 0.35,0.64 "size graph 0.02,20      filled linewidth 5"
set label  8  at 0.35,0.58 "size graph 0.02,20      filled linewidth 2 linetype 2"
set label  9  at 0.35,0.52 "size graph 0.02,20      filled linewidth 2 linecolor rgb \"purple\""
set label 10  at 0.35,0.46 "size graph 0.02,20,50   filled linewidth 2"
set label 11  at 0.35,0.40 "size graph 0.02,20,150  filled linewidth 2"
set label 12  at 0.35,0.34 "size graph 0.02,90      linewidth 2"
set label 13  at 0.35,0.28 "size graph 0.02,150,50  linewidth 2"
set label 14  at 0.35,0.22 "size graph 0.02,150,50  filled linewidth 2"
set label 15  at 0.35,0.16 "size graph 0.02,150,170 filled linewidth 2"

set xrange [0:1]
set yrange [0:1]
set border 0
unset ytics
unset xtics
set format xy ""

set out "arrow_style_test.eps"
set term post color enhanced "Arial,20" size 10in,10in landscape

plot 1/0 notitle

set out
set term win
replot