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で別々の指定方法を適用することもできます。また、from
とto
やrto
で指定方法が混在していてももちろん構いません。
これらの座標の使い方の具体例に関しては「ラベルの座標」を参照してください。
上の例からも明らかなように、残念ながらデフォルトの矢印はあまりかっこいいものとは言えません。矢印の形状はset style arrow
を使用して細かく設定でき、set arrow
コマンド中でarrowstyle *
として設定した形状を使用することが出来ます。なお、arrowstyle
はas
と略記が可能です。
例えば、以下のようなスクリプトを実行します。このスクリプトでは、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