コンテンツにスキップ

基本編

plotコマンドを用いてグラフを描けるようになりました。 しかし、まだラベルやタイトルが付いていません。 また、このままではウィンドウにグラフが表示されているだけなので、スライドや文書に貼り付けるためには保存する必要があります。 このページでは、こういった事柄について学習します。

細かい図の指定

作図範囲を指定する(set x(y)range, set autoscale

作図範囲を指定するにはset xrange(またはyrange)コマンドを用います。 例えば、\(x\)の作図範囲を\(-\pi\)から\(\pi\)まで、\(y\)の作図範囲を\(-2\)から\(2\)までにしたい時には、 plot sin(x)などの後に

gnuplot> set xrange [-pi:pi]
gnuplot> set yrange [-2:2]
と入力します。 ただしsetコマンドは設定を変えるだけですから、画面に表示されているグラフは変化しません。
gnuplot> replot
と入力すれば、画面に表示されているグラフが更新され、正しいグラフになると思います。

\(y=\sin(x)\)のグラフ

作図範囲の指定を取り消したい場合には

gnuplot> set autoscale
と入力します。もちろんこの後にもreplotと入力する必要があります。 以降このテキストではreplotの入力は省略しますが、設定を変えた(setコマンドを使った)後は必ずreplotと入力して図に反映させる必要があります。

曲線に名前を付ける(title, set key

plotコマンドによってグラフを描くと、右上にそれがどういう曲線か表示されます(凡例)。 これを変えるにはplotコマンドの際にtitleという引数を加えます。 曲線の名前の部分を ' または '' でくくることに注意して下さい。

gnuplot> plot sin(x) title 'my cool plot'

曲線の名前を表示する必要がない時には

gnuplot> plot sin(x) title 'with name', cos(x) notitle

のようにします。

凡例の表示場所を設定するにはset keyというコマンドを使います。 ここでは詳しい説明は省略しますので、オンラインマニュアルでその使い方を確かめてみて下さい。

描画スタイルを変える(set style function, with, set grid

今まで表示したグラフは連続した曲線で描かれていました。 この表示方法を変えるコマンドとしてset style functionがあります。例えば

gnuplot> set style function steps
としてみましょう。グラフが階段状になるはずです。

段の数(一般にはgnuplotが描画のためにサンプルする点数)を変えるにはset samplesというコマンドを用います。

gnuplot> set samples 40
とすれば、40段のグラフが描かれます。

グラフの表示はこの他にも、点線dotsや棒グラフboxes、パルス状のグラフimpulsesなどが使えます。 詳しくは、

gnuplot> help set style
を見てください。 なお、デフォルトに戻すにはset style function linesとします。

複数のグラフをそれぞれ異なったスタイルで描きたい場合には、plotコマンドの際にwithをつけて指定します。 例えば

gnuplot> plot sin(x) with points, sin(x)*cos(x) with impulses
のようにします。

set gridコマンドを使うと、\(x\) 軸、\(y\) 軸それぞれの目盛が刻まれている値の格子が入ります。 格子を消すにはunset gridとします。

軸に名前をつける(set x(y)label, title

\(x\)軸と\(y\)軸が何を意味しているのか表示させてみましょう。 これにはset xlabel(またはylabel)を用います。

gnuplot> set xlabel 'axis 1' 
gnuplot> set ylabel 'axis 2'
グラフ全体の表題を付けるにはset titleです。
gnuplot> set title 'super title'

x軸とy軸のスケール(set size ratio

gnuplotでは、縦横のスケールを指定することが可能です。 set size ratio rでグラフの横縦の比率が\(r\)になり、 set size ratio -rでy軸の単位長さがx軸の\(r\)倍になります。

例えば、x軸とy軸のスケールを一致させるには

gnuplot> set size ratio -1
とします。

対数プロット(set logscale

gnuplotでは対数軸の作図も可能です。例えば

gnuplot> set logscale y
gnuplot> plot exp(x+1)
としてみましょう。\(y\)軸が対数表示になるはずです。 logscaleの後を省略した場合には全ての軸が対数軸になります。

対数プロットをやめるにはunset logscale yとします。

グラフを保存する(set terminal postscript, set output

作ったグラフを保存してみましょう。 まず、

 gnuplot> set terminal
を実行してください。 利用可能なターミナルの種類が一覧で出てきます(デフォルトは普通qtです)。

ここにpngjpegがあるか探しましょう。 もしあれば、png/jpegでの出力が可能です。 ない場合は、他の出力形式を検討することになります。 (個人的な意見ですが、pdf出力用のpdfcairoはオススメしません。バグることが多いからです)

以下では、pngでの出力方法を説明します。 ここまで色々なコマンドを入力していますから、まずresetでまっさらな状態にしておいてから、 plot sin(x)しましょう。 次に

gnuplot> set terminal png
gnuplot> set output 'output.png'
でターミナルをpng用に切り替えるとともに、ファイル名を指定します。 このままでは出力先を指定しただけですから、ファイルには何も書き込まれていません。 そこで
gnuplot> replot
とします。これでoutput.pngにグラフが書き込まれているはずです。

最後に

 gnuplot> set output
で出力ファイルを閉じ、ターミナルを元へ戻すために
 gnuplot> set terminal qt
とします。

Warning

  • set outputをしないで他へ出力に切り替える(set terminal qt等する)とファイルが壊れることがあります。

pltファイルとload

ここまではすべて対話方式でコマンドを入力してきましたが、コマンドの数が多くなってくると面倒です。 複数のコマンドをひとつのファイルに書いておき、まとめて実行することができます。

まずファイルを作りましょう。ここではex.pltとします(一般にpltという拡張子を用いる場合が多いです)。 エディタで以下の内容を書いてみてください。

set xlabel 'x'
set ylabel 'y'
set title 'Another cool graph'
set xrange [0:10]
set yrange [-1:1]
p exp(-x) * sin(10*x)

これらのコマンド群を一気に実行するにはloadというコマンドを使います。

gnuplot> load 'ex.plt'

減衰曲線

以下は筆者の個人的な意見です。 色々なpltファイルを使っていると、お互いの設定が干渉しあって訳の分からないことになります。 例えば、ターミナルの種類をpltファイル内で変えたのを忘れてしまい、 qtターミナルだと思って作業していたらpng用ターミナルだった、などなど。

これらを防ぐために、pltファイルの先頭や末尾で設定を初期化しておくと安全です。

以下は、pngファイルを作り終わったらqtターミナルに戻る例です。

reset
set terminal png
set output "expsin.png"

set xlabel 'x'
set ylabel 'y'
set title 'Another cool graph'
set xrange [0:10]
set yrange [-1:1]
p exp(-x) * sin(10*x)

set terminal qt
reset

loadsave

先ほどloadというコマンドを学びましたが、このloadと兄弟関係にあるコマンドがsaveです。 saveコマンドを用いることで、これまでに対話形式で実行してきたコマンドを先程自分で書いたpltファイルと同様な出力として得られます。 例えば、

gnuplot> p cos(x)
gnuplot> set xlabel 'x'
gnuplot> set ylabel 'y'
gnuplot> set terminal postscript
gnuplot> set output 'cos.ps'
gnuplot> rep
gnuplot> save 'cos.plt'
としてみましょう。1

これをエディタで開いてみると、

#!/usr/bin/gnuplot -persist
#
#    
#       G N U P L O T
#       Version 4.6 patchlevel 6    last modified September 2014
#       Build System: Linux i686
#    
#       Copyright (C) 1986-1993, 1998, 2004, 2007-2014
#       Thomas Williams, Colin Kelley and many others
#    
#       gnuplot home:     http://www.gnuplot.info
#       faq, bugs, etc:   type "help FAQ"
#       immediate help:   type "help"  (plot window: hit 'h')
# set terminal postscript landscape noenhanced defaultplex \
   leveldefault monochrome colortext \
   dashed dashlength 1.0 linewidth 1.0 butt noclip \
   nobackground \
   palfuncparam 2000,0.003 \
   "Helvetica" 14  fontscale 1.0 
# set output 'cos.ps'

(略)

set loadpath 
set fontpath 
set psdir
set fit noerrorvariables noprescale
GNUTERM = "x11"
p cos(x)
#    EOF
のように書かれていると思います。

一瞬意味不明に見えるかも知れませんが、これは実際にgnuplot>において入力することができるコマンドを並べただけなのです。 自分で打ち込んでない部分(例えばここでは、set loadpathなど)は、gnuplotが勝手に解釈してデフォルトの環境を出力してくれます。 このファイルを良く見ると、自分で入力したset titleset xlabelが書き出されていることが分かると思います。 p cos(x)は設定された環境が全て反映されるように最後に書かれるようになっています。

このファイルを先ほど学んだloadコマンドで読み込めば同じ状況が再現されます。 ただし、set terminal postscriptset output 'cos.ps'のように、terminalのタイプを変更したり何かを出力したりするコマンドの部分は、saveで出力したコマンドファイルではコメントアウトされます。 皆さんのファイルでもきっとそうなっていることと思います(コマンドファイルのコメントアウトの最後の部分)。 もしloadすることでpostscriptファイルを作りたければ、この部分のコメントアウトを消したうえで、先ほど学んだ loadコマンドを用いるかあるいはktermなど普通のターミナル上で

$ gnuplot cos.plt
と入力することでpostscriptファイルを作ってやることができます。


  1. psとはpostscriptの略です。画像の保存形式の一つと思ってください。