最低限 Unix / Linux [II] 【7. 付録:gnuplotについて】

  1. 事前準備
  1. シェル
  1. テキストエディタ
  1. シェルスクリプト
  1. [付録] データ圧縮・解凍とアーカイブ
  1. 本日の課題
  1. [付録] gnuplot について
  1. [付録] 位置天文学
情報実験第 3 回トップへ

gnuplot(ニュープロット,グニュープロット)は,オープンソースのグラフ描画ソフトウェアです.Linux, Windows, MacOS で利用でき,数式からのグラフ描画とデータファイルからのグラフ描画に対応し,様々な出力形式(PNG, JPEG, GIF, EPS, PDF, SVG, etc...)をサポートしています.本ページでは,gnuplot の簡単な使い方と今年度の INEX 課題で用いられているバッチファイルの中身について簡単に説明します.

gnuplot のインストール

gnuplot は gnuplot.info からインストールファイルをダウンロードできます.また,Debian 系の Linux ならば,apt を用いることもできて,
# apt install gnuplot gnuplot-x11
でインストールができます.

gnuplot とその使い方

今回は簡単な例として,$y=\frac{\sin x}{x}$のグラフを描画し,そのグラフを PNG 画像で出力する例を取り上げます.何らかのウィンドウシステム上で gnuplot を用いていることを仮定します.

gnuplot の対話モードの起動

シェル上で,
$ gnuplot
と打ち込みます.すると,
            G N U P L O T
	    Version 5.0 patchlevel 3    last modified 2016-02-21

	    Copyright (C) 1986-1993, 1998, 2004, 2007-2016
	    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')

	    Terminal type set to 'wxt'
	    gnuplot>
	  
と表示され,gnuplot> というプロンプトが返ってきます.これで gnuplot の対話モードが起動します.対話モードでは,gnuplot のコマンドをキーボードで入力してグラフの描画を行います.ちなみに,gnuplot の対話モードを終了して通常のシェル画面に戻るためには,exit と入力します.
gnuplot> exit

グラフの描画

早速,$y=\frac{\sin x}{x}$のグラフを描画しましょう.2 次元のグラフを描画するためには,plot コマンドを使います.plot のあとにスペースを入れてその後に数式($x$の式)を書けば,新しい窓が出てきてグラフが描画されます.

gnuplot> plot sin(x)/x
Fig. 1:表示されるグラフ.

式には,+(加法),-(減法),*(乗法),/(除法),^(累乗)などの二項演算子が使えます.また,関数として,三角関数,双曲線関数,逆三角関数,指数・対数関数,特殊関数(例えばガンマ関数など)が使えます.

描画設定と再描画

gnuplot では,描画範囲,各軸の書き方などの設定を変更することもできます.ここでは新たな設定を施し,その設定の下で先ほどのグラフを再描画してみましょう.グラフの様々な設定を変更するためには set コマンドを用います.先ほどのグラフにはマス目が無かったため,例えばマス目を設定してみます.
gnuplot> set grid
また,$x$の範囲を$-15\leq x \leq 15$としてみます.
gnuplot> set xrange [-15:15]
これらの設定を先ほどのグラフに適用するには,replot コマンドを用いてグラフの再描画を行います.
gnuplot> replot

Fig. 2:再描画されたグラフ.

ファイルへの出力と gnuplot の終了

このグラフを画像ファイルへ出力することを試みましょう.これまでは,グラフのデータの出力先 (terminal) はウィンドウ (Linux ならば X-window-system) でした.これを PNG 画像ファイル (pngcairo) とします.pngcairo というのは,cairo というライブラリを用いて PNG 画像へ出力するモードです.出力先の変更は set コマンドを使って以下のように行います.
gnuplot> set terminal pngcairo

このまま plot してしまうと,端末に PNG 画像のデータがそのまま表示されてしまいます.そこで,PNG 画像データを格納するファイル名(output)を指定します. ファイル名の指定は set コマンドを用いて以下のように行います.
gnuplot> set output "new.png"
事前にグラフが描かれている状態であったとしても,この状態で再描画を行えば,PNG 画像データがファイルへ書き込まれます.
gnuplot> replot
ただし,このままでは画像ファイルは gnuplot によってアクセスされたままであり,他のソフトウェアで開くことができない状態となっています.よって,画像ファイルを別のソフトで閲覧・編集したいときは,gnuplot で開かれている画像ファイルを閉じる必要があります.画像ファイルを閉じるために,gnuplot 自体を終了しても構いませんが,例えば
gnuplot> unset output
とするだけでもよいです.一方,再び画面 (X-window-system) へのグラフ描画へ戻るだけでも 画像ファイルは閉じられます.そのときは
gnuplot> set terminal x11
とします.また,gnuplot の対話モードを終了して元のシェルに戻りたい場合は
gnuplot> exit
とします.

バッチモード

上記に示した対話モードでは,いちいち順序を追ってコマンドを入力しなければならないため,例えばグラフの設定を使いまわしたいときには不便です.そんなときにはバッチモードを使います.バッチモードは,gnuplot のコマンドが列挙されているファイル(バッチファイル)を gnuplot 自身が読み込み,そのコマンドを逐次実行するというモードです.バッチモードでグラフを描画する際は,シェルから以下のように gnuplot へバッチファイルを読み込ませます.
$  gnuplot バッチファイルのパス

それではバッチファイルを作成してみましょう.バッチファイルの作り方は簡単で,gnuplot のコマンドたちを実行順に 1 行に 1 つずつ書くだけです.今回はバッチファイルのファイル名を batch.gpl としましょう.
バッチファイル (batch.gpl) の中身:
set grid
set xrange [-15:15]
plot sin(x)/x
set terminal pngcairo
set output "new.png"
replot
exit
バッチファイルが完成したら,gnuplot へ読み込ませます.
$  gnuplot batch.gplのパス
しばらく時間が経つとプロンプトが戻ってきて,new.png がカレントディレクトリに生成されているはずです.

inex 課題で用いた gnuplot バッチファイルを覗く

ここで,2019 年第 3 回で出題された課題で用いたバッチファイル (HR.gpl) の中身を見てみましょう.ここでは各行での動作をわかりやすくするために,"#"から始まる説明文を付け加えました."#"から始まる文は,gnuplot ではコメント文として扱われ,読み込まれることはありません.なので,以下の通り"#"が入った状態でバッチファイルを記述しても,正しく実行されます.

課題で用いたバッチファイル (HR.gpl) の中身:
	reset				#設定をクリーンにする

	set datafile separator ","	#データの区切りをカンマにする

	set xrange [-0.5:2]		#x軸の範囲を設定する
	set yrange [16:-2]		#y軸の範囲を設定する
	set border lc rgb "white"	#枠を設定し色を白とする
	set grid lc rgb "white"		#グリッドを設定し色を白とする
	unset key			#凡例を非表示

	set xlabel "Color Index (B-V)" tc rgb "white"		#x軸のラベルを設定し,文字色を白とする
	set ylabel "Absolute Magnitude" tc rgb "white"		#y軸のラベルを設定し,文字色を白とする

	set term pdfcairo enhanced size 10cm,10cm		#描画モードをpdf出力モードに変更
	set output "HR.pdf"					#出力ファイルを設定

	#各データファイルのプロット.データの8列目(BV色指数)をx,7列目(絶対等級)をyとし,点でプロット (w p).
	#点の大きさ (ps),点のタイプ (pt),点の色 (lc) を設定.
	set obj rect behind from screen 0, screen 0 to screen 1, screen 1 fc rgb "black"
	plot "MS.csv" u 8:7 w p lw 1 lc rgb "#80DDFF" pt 0 ps 5,\
	"GS.csv" u 8:7 w p lw 1 lc rgb "#FF80AA" pt 0 ps 5,\
	"WD.csv" u 8:7 w p lw 1 lc rgb "#FFF280" pt 0 ps 5

	set term pop		#描画モードを元に戻す
	exit



<< 戻る (本日の課題)      次へ >> ([付録] 位置天文学とプラネタリウム)      情報実験 第 3 回 のトップへ >>

最終更新日: 2019/04/24 松岡 亮 copyright © 2019 inex