グラフに文字を書く

グラフに文字を書く場合はset labelコマンドを使用します。labelというキーワードに倣って、このページでは表示する文字を「ラベル」と呼ぶことにします。

ラベルの表示方法

まず、簡単な例を示します。

set label 1 at graph 0.5,0.5 "label 1"
plot sin(x)

上の例では"label 1"という文字列のラベルを表示させています。set labelコマンドではまずラベルのインデックスを整数で指定します。このインデックスは、後でラベルを書き換えたり削除したりするときに必要です。

ラベルの座標

ラベルを表示する場所はat **,**で指定します。場所の指定には幾つかの方法があり、graph **,**という指定方法ではグラフの左下を(0,0)、右上を(1,1)とする座標に対してラベルの位置を指定します。他に、描画領域の左下を(0,0)、右上を(1,1)とする座標系に対して指定するscreen **,**という方法や、プロットされている関数/データのx,y座標に対して指定するfirst **,**、同じくx2,y2座標に対して指定するsecond **,**があります。

具体的には以下の例をご覧下さい。位置の指定方法によってラベルの位置が異なるのがお分かりいただけると思います。なお、label 5の例のようにxとyで別々の指定方法を適用することもできます。

set tmargin 5
set bmargin 5
set rmargin 8
set lmargin 8

set xrange [-1:1]
set yrange [-1:1]
set x2range [0.0:0.15]
set y2range [0.0:0.15]
set xtics nomirror
set x2tics nomirror
set ytics nomirror
set y2tics nomirror

set label 1 at graph   0.1,0.1 "+ at graph  0.1,0.1"
set label 2 at screen  0.1,0.1 "+ at screen 0.1,0.1"
set label 3 at first   0.1,0.1 "+ at first  0.1,0.1"
set label 4 at second  0.1,0.1 "+ at second 0.1,0.1"
set label 5 at graph   0.1,first 0.1 "+ at graph 0.1, first 0.1"

plot 1/0 notitle

これらの座標指定方法の上手な使い方に関しては「上手なラベル配置のコツ」をご覧下さい。

ラベルの基準位置

at ***で指定した場所にラベルのどの位置を合わせるかは、キーワードleft/center/rightで指定します。leftはラベルの左端をat ***で指定した位置にあわせます。同様に、centerはラベルの中央を、rightはラベルの右端をそれぞれあわせます。

具体的には、以下の例をご覧下さい。以下の3つのグラフはいずれも横位置がgraph 0.5ですが、基準位置のキーワードが異なるため、ラベルの位置も左右に異なっています。

set xrange [-1:1]
set yrange [-1:1]
set label 1 left   at graph 0.5,0.2 "+ left at graph 0.5,0.2"
set label 2 center at graph 0.5,0.5 "center at gr+aph 0.5,0.5"
set label 3 right  at graph 0.5,0.8 "right at graph 0.5,0.8 +"

plot 1/0 notitle

これらの上手な使い方に関しては「上手なラベル配置のコツ」をご覧下さい。

ラベルその他もろもろ

ラベルは回転させることも出来ます。回転させるにはrotate by **を使います。**には角度を入れます。下図のように、回転は基準位置を中心に行われます。

set xrange [-1:1]
set yrange [-1:1]
set label 1 left   at graph 0.2,0.5 "+ left rotate by 90"   rotate by 90
set label 2 center at graph 0.5,0.5 "center rot+ate by 180" rotate by 180 
set label 3 right  at graph 0.8,0.5 "right rotete by 270 +" rotate by 270

plot 1/0 notitle

また、ラベルの文字に色をつけたり、データ用のポイントを表示させたりすることも出来ます。フォントを変えることもできます。以下の例のように、色をつける場合はtextcolor ***を使います。***にはデータ用の線の色と同じ色を使うlinetype **lt **と省略可)、色名を指定できるrgb ***paletteを用いる方法等があります。データ用のポイントはpoint ***で表示可能ですが、そのままだと文字列と重なってしまうので、label 5のようにoffset **と併用するほうが良いかもしれません。フォントはfont ***で変更します。

set xrange [-1:1]
set yrange [-1:1]
set palette model HSV functions gray,1,1 # HSV color space
unset colorbox

set label 1 left at graph 0.1,0.8 "textcolor linetype 1"   textcolor lt 1
set label 2 left at graph 0.4,0.8 "textcolor rgb \"blue\"" textcolor rgb "blue" 
set label 3 left at graph 0.7,0.8 "textcolor pallette frac 0.5" textcolor palette frac 0.5
set label 4 left at graph 0.1,0.5 "point pointtype 5 pointsize 2" point pt 5 ps 2
set label 5 left at graph 0.5,0.5 "point pointtype 5 pointsize 2 offset 1" point pt 5 ps 2 offset 1
set label 6 left at graph 0.1,0.2 "font \"Times,30\"" font "Times,30"

plot 1/0 notitle

上手なラベル配置のコツ

座標の指定やラベル基準位置の指定を上手く使うことでラベルの配置は格段に楽になります。firstsecondはデータや関数に対してラベル位置が固定されるので、個々のデータの説明などを表示するのに適しています。一方、graphscreenはグラフに対してラベル位置が固定されるので、グラフ全体の情報を表示する場合などに適しています。また、ラベルの基準位置も適宜工夫するのが良いでしょう。

例えば、以下の例では1から3のラベルはx位置はピークの位置に対して固定しy位置はグラフに対して固定したいため、at first **,graph **という指定方法をしています。また、ピークとラベルの中央をそろえるため、中央ぞろえ(center)にしています。4番目のラベルはグラフの右上に表示したいため、右詰(right)にして、座標はgraphで指定しています。5番目のラベルは描画域の真ん中上部に置きたいので、screen座標系を使い、中央ぞろえにしています。

set samples 1000
set xrange [0:100]
set yrange [-1:21]
gauss(x,x0,A,s)=A*exp(-((x-x0)/s)**2)
set tmargin 5

set label 1 center at first 10,graph 1.05 "peak1"
set label 2 center at first 40,graph 1.05 "peak2"
set label 3 center at first 80,graph 1.05 "peak3"
set label 4 right at graph 0.99,0.9 "simulation 2009/xx/xx"
set label 5 center at screen 0.5,0.9 "result"

plot gauss(x,10,10,1)+gauss(x,40,20,1)+gauss(x,80,3,1) notitle

このようにしておくと、例えばxrangeを変更しても、下のように関数/データに関係する部分だけが動いて、意図通りに表示されます。

set samples 1000
set xrange [0:150]
set yrange [-1:21]
gauss(x,x0,A,s)=A*exp(-((x-x0)/s)**2)
set tmargin 5

set label 1 center at first 10,graph 1.05 "peak1"
set label 2 center at first 40,graph 1.05 "peak2"
set label 3 center at first 80,graph 1.05 "peak3"
set label 4 right at graph 0.99,0.9 "simulation 2009/xx/xx"
set label 5 center at screen 0.5,0.9 "result"

plot gauss(x,10,10,1)+gauss(x,40,20,1)+gauss(x,80,3,1) notitle