こんにちは(@t_kun_kamakiri)
本記事ではグラフプロット作成ソフトウェアのgnuplotのグラフの装飾の基礎について解説したいと思います。
- gnuplotを少し使ったことがある人
- gnuplotの装飾の基礎を学びたい方
グラフを美しき見せるためには装飾が必要です。
gnuplotでグラフの装飾を行うコマンドは「set」からはじまります。
gnuplotのコマンドは保存されるので、以下のコマンドで初期化していることを前提に話を進めます。
1 |
reset |
環境
DEXCS2022(gnuplot 5.4)
もっと色々なプロット方法を学びたい方はこちらのdemoをご参考ください。
プロットの ヘルプ
ここでは2次元グラフについてのグラフのスタイルをいくつか紹介します。
まずは、通常の線を書くことにします。
plotに関してどのようにオプションを加えていくかは、helpで確認することができます。
1 |
help plot |
以下のように出てきます。
1 2 3 4 5 6 7 8 9 10 11 |
Syntax: plot {<ranges>} <plot-element> {, <plot-element>, <plot-element>} Each plot element consists of a definition, a function, or a data source together with optional properties or modifiers: plot-element: {<iteration>} <definition> | {sampling-range} <function> | <data source> | keyentry {axes <axes>} {<title-spec>} {with <style>} |
こちらは慣れかもしれませんが、実践を通してグラフの書き方の感覚をつかんでいく方が良いでしょう。
グラフの装飾の基本設定
グラフの装飾では
1 |
plot sin(x) lt 7 lw 4 dt 2 |
プロットのスタイル
グラフのプロットのスタイルはwith以降で指定することで可能です。
例えば以下の点だけを表示したい場合は以下のようなコマンドになります。
1 2 |
set sample 10 plot x with points |
※点の数が少ない方がわかりやすいので「set sample」で10点のみにしています。
2次元グラフを作成するだけならこれだけ覚えておけばよいでしょう。
軸の範囲
軸の範囲を指定してグラフ化したい場合は以下のようにします。
1 |
plot [-10:10] [-2:5] sin(x)+2 |
1 2 3 |
set xrange [-10:10] set yrange [-2:5] plot sin(x)+2 |
こちらでも同じグラフができます。
ただし「set」コマンドを使ったことにより、これ以降の$x$,$y$軸の範囲は固定されてしまいます。
軸のラベル
$x$軸、$y$軸にラベルを付けることができます。
1 2 3 4 |
set xlabel "x" set ylabel "f(x)" f(x) = sin(x)+2 plot f(x) |
1 2 |
set label "sin(x)+2" at 3,3 plot [-10:10] [-2:5] f(x) |
1 2 3 |
unset xlabel unset ylabel unset label |
ちなみに、全ての設定を初期化したい場合はresetコマンドで初期設定にすることができます。
1 |
reset |
目盛りの設定
目盛りの指定もできます。
1 2 3 |
set xtics 0,0.5,10 plot sin(x) |
これでは$x$軸の範囲と目盛りが合っていないので、$x$軸の範囲も合わせて行う必要があります。
1 2 3 4 |
set xrange[0:10] set xtics 0,0.5,10 plot sin(x) |
目盛りには自由に数値も文字も設定することができます。
以下の例は、
- $x=2$に文字列の”2″
- $x=5$に文字列の”test”
と指定しています。
1 |
set xtics ("-2" 2, "test" 5) |
矢印を書く
グラフ内に矢印を書くことがでkます。
また「set label」と組み合わせるとグラフ内に矢印で補足説明が可能になります。
1 2 3 4 |
set arrow from -1,0.6 to 0,0 set label "sin(x)" at -1.4 ,0.64 plot sin(x) |
グラフの凡例
複数グラフを載せた場合、グラフにタイトルを付けたい場合もあります。
デフォルトでは打ち込んだ関数やファイル名になりますが、「title」オプションで任意の名前にすることができます。
まずはデフォルトから、
1 |
plot x, x**2, x**3 |
1 |
plot x title "linear", x**2 title "quadratic", x**3 title "cubic" |
1 |
plot x title "linear", x**2 title "quadratic", x**3 notitle |
とします。
グラフの凡例の位置変更
グラフのタイトルがグラフと重なったりする場合があります。
機能 | コマンド |
キーを表示する | set key |
キーを表示しない | set nokey |
キーの状態を見る | show key |
下記のように色々と設定は可能です。
機能 | オプション |
キーの場所を左上にする | left top |
キーの場所を左下にする | left bottom |
キーの場所を右上にする | right top |
キーの場所を右下にする | right bottom |
キーの場所を画面外上段にする | top outside |
キーの場所を画面外下段にする | bottom outside |
キーの場所をグラフの下側にする | below |
キーが表示される場所の座標を指定する | at x,y |
線の見本の長さにm文字分の長さを追加する | samplen n |
説明を線の右側に付ける | noreverse |
説明を線の左側に付ける | reverse |
線の説明を箱で囲む | box |
線の説明を箱で囲まない | nobox |
文字が表示される部分の前側にm文字分の空白を追加する | width w |
グラフが複数あるとき (7.2節参照), 説明の文字を左にそろえる | Left |
グラフが複数あるとき説明の文字を右にそろえる | Right |
キー全体に標題をつける | title 'キーの標題 |
色々と設定方法がありますが、例えば座標位置でタイトルの場所を指定したい場合は以下のようにします。
以下のように「horizontal」を入れることで各グラフのタイトルが横並びになります。
1 2 |
gnuplot> set key horizontal at 2,1 gnuplot> plot sin(x), cos(x) |
グラフのタイトル
グラフの頭にタイトルを付けることができます。
1 2 3 |
set title "sin(x)" plot sin(x) |
グラフのサイズ
キャンバスに対してプロットの範囲変更することができます。
1 2 3 4 |
set size square set size ratio 2 // y/x set size noratio set size 0.5, 0.4 |
- square:$x$,$y$軸の長さを等しくする
nosquare:squareの設定を解除 - ratioを指定すると$y$/$x$の比率でサイズを指定
- size 0.5, 0.4:50[%]×40[%]
例えば以下のようにするとプロット範囲が50[%]×40[%]になりますう。
1 2 |
set size 0.5, 0.4 plot sin(x) |
プロット範囲の位置はデフォルトで次に示す原点(set origin 0,0)になっています。
グラフの位置
プロットの位置を指定するには「set origin」を使います。
1 2 3 4 |
set size 0.5, 0.4 set origin 0.2, 0.3 plot sin(x) |
「set origin」によるプロット範囲の位置の指定は「set multiplot」で複数のグラフを配置するときに有効なコマンドです。
余白
プロットの枠をキャンバスに対して余白を持たせる場合のコマンドが以下のコマンドです。
- set bmargin 10:プロット枠の下側10文字分
- set tmargin 8:プロット枠の上側8文字分
- set rmargin 20:プロット枠の右側6文字分
- set lmargin 20:プロット枠の左側4文字分
1 2 3 4 5 6 |
set bmargin 10 set tmargin 8 set lmargin 20 set rmargin 20 plot sin(x) |
枠の設定
枠線をアレンジすることもできます。
「set border」の後に枠線に対応したビットの論理和を指定する必要があります。
ビット | plot | splot |
1 | 下 | 底の左手前 |
2 | 左 | 底の左後ろ |
4 | 上 | 底の右手前 |
8 | 右 | 底の右後ろ |
16 | 鉛直左 | |
32 | 鉛直後ろ | |
64 | 鉛直右 | |
128 | 鉛直の手前 | |
256 | 天井の左後ろ | |
512 | 天井の右後ろ | |
1024 | 天井の左手前 | |
2048 | 天井の右手前 |
1 2 |
set border 1+2 linewidth 2.5 linetype 3 plot sin(x) |
以下のようにすると枠線を消すことができます。
1 2 3 |
unset border plot sin(x) |
フォントサイズの変更
フォントサイズを変更したい場合の例を示します。
まずはデフォルトでグラフを表示した場合は以下となります。
1 2 3 4 |
set title "test" set xlabel "x" set ylabel "sin(x)" plot sin(x) title "test" |
ちょっとフォントサイズが小さい気がしますので以下のように変更します。
1 2 3 4 5 6 7 8 9 |
#タイトルのフォントサイズ set title font "Arial,24" #ラベルのフォントサイズ set xlabel font "Arial,24" set ylabel font "Arial,24" #ticsはメモリ文字 set tics font "Arial,24" #keyは凡例 set key font"Arial,24" |
フォントが大きすぎると$y$ラベルの文字が目盛りと重なったりするので、グラフの左枠に余白を設けて(set lmargin)、$y$ラベルと少し左にオフセット(set ylabel “sin(x)” offset -5,0)すればいい感じになります。
1 2 3 4 5 |
set lmargin 15 set title "test" set xlabel "x" set ylabel "sin(x)" offset -5,0 plot sin(x) title "test" |
グラフのスタイル(装飾)の指定
plotの記述に装飾を書くと煩雑になるので以下のようにスタイルを保存して使うことができます。
1 2 3 4 5 |
set style line 1 lc rgb "red“ set style line 2 lc rgb "blue" lw 3 set style line 3 lc rgb "blue" lw 3 dt 8 plot sin(x) ls 1 title "ls 1", cos(x) ls 2 title "ls 2", sin(2*x) ls 3 title "ls 3" |
グラフのグリッド
グラフにグリッドを入れることができます。
1 2 3 |
set grid plot sin(x) |
$x$軸の0と$y$軸の0に点線を描きたい場合は以下のようにします。
1 2 3 4 |
set xzeroaxis set yzeroaxis plot sin(x) |
複数の軸のグラフ
複数の軸を指定して1つのグラフにすることができます。
1 2 3 4 5 6 7 |
set xlabel "x" set ylabel "y1" set x2label "x2" set y2label "y2" plot x**2 axes x1y1, x**3 axes x2y2 with linespoints |
複数のグラフ化
複数のグラフ化には「set multiplot」コマンドを使います。
1 2 3 4 5 6 |
set multiplot set size 0.4,0.4 set origin 0.1,0.1 plot sin(x) set origin 0.5,0.5 plot cos(x) |
- layout 3,2:3行2列のグラフ
- columnsfirst:優先して行方向に並べていく
1 2 3 4 5 6 7 8 |
set size 1,1 set multiplot layout 3,2 columnsfirst scale 1.0, 1.0 plot x plot x**2 plot x**3 plot x**4 plot x**5 plot x**62 |
アニメーション作成
最後にアニメーション作成のコマンドを示しておきます。
アニメーション作成はgifファイル形式で作成します。
1 2 3 4 5 |
set terminal gif animate delay 4 set output "test.gif" f(x,t) = sin(x-t) do for {i=1:96} {plot f(x,i*0.1) } |
次の画像を表示するまでに0.001×4秒静止するようにしています。
for文に関して{}で改行して見やすくしても良いですが、コマンドラインで書くときは上記のように1行で書くことになります。(※\で改行はできます)
では、作成された「test.gif」を開いてみましょう。
アニメーション作成になっていますね。
もちろん本記事のグラフの装飾を駆使すれば、お好みの装飾でアニメーション作成ができます。
まとめ
本記事ではgnuplotの入門ということで以下のコマンドを紹介しました。
- プロットのスタイル:plot
- 軸の範囲:set xrange
- 軸のラベル:set xlabel
- 目盛りの設定:set xtics
- 矢印を書く:set arrow
- グラフの凡例:plot x title “title”
- グラフの凡例の位置変更:set key
- グラフのタイトル:set title
- グラフのサイズ:set size
- グラフの位置:set origin
- 余白:set bmargin
- 枠の設定:set border
- グラフのスタイル(装飾)の指定:set style line
- グラフのグリッド:set grid
- 複数の軸のグラフ:set x2label
- 複数のグラフ化:set multiplot