gnuplot - グラフを作成する

スポンサーリンク

gnuplotはフリーでグラフを作成できるソフトウェアになります。
gnuplotの読み方は"new"+"plot"(ニュープロット)であり、gnuplotの開発者たちは当初、「newplot」と命名したかったそうですが既に開発者たちの職場に同じ名前のプログラムがあったようなので、newと同じ発音のgnuを用いた洒落た名前としてgnuplotとしたそうです。また、ニュープロットではなく、グニュープロットと読む人もいます。
gnuは牛に似た動物のヌーのことを意味する単語になります。GNU projectのGNUのスペルとはたまたまダブったものになります。
gnuplotはGNU projectではなく独自のプロジェクトで、ライセンスもGPLではなく、独自のフリーソフトウェアライセンスが用いられています。

スポンサーリンク

インストール

ここで利用するgnuplotはaptからからパッケージをインストールしたものを利用します。

利用している環境としてUbuntu(Desktop版)とgnuplotのバージョンは以下のようになります。

gnuplotのサンプルデモ

gnuplotのソースコードの中にdemosというディレクトリがあり、その中にはgnuplotの多くのサンプルスクリプトがあります。
Web上でもサンプルを見ることができますが、手元で動作するサンプルを持っておくと使いたいグラフの参考やテンプレートとして利用できるため、ソースコードをダウンロードしても良いと思います。
ソースコードは公式サイトからgithub等からダウンロードすることができます。また、前設定が少し必要かもしれませんがapt-get sourceコマンド等でソースコードをダウンロードする方法もあります。

gnuplotの起動

gnuplotはファイルを指定して実行できます。
ファイルを指定しない場合、gnuplotは対話的なモードで起動します。この対話的なモードはexitコマンドで終了できます。

ファイルを指定するとそのファイルから読み込んで実行します。複数のファイルを指定するとファイルを順番に読み込んで実行していき、最後までファイルを読み込むとgnuplotは終了します。

コマンド例と実行結果

simplegraph.gp

data.dat

私の環境のwindows 10だと凡例にある文字が一部欠けるような感じになりました。文字が欠ける現象は環境変数PANGOCAIRO_BACKENDにfontconfigを設定するととなくなりますが、
文字のフォントに統一感がなく、ガタガタしているような感じになりました。なので、Windowsでgnuplotを利用する場合は、フォントの指定を色々変えてみて調整したほうが良いと思います。

Windows 10でのフォント例(Meiryo UIの14pt)

出力形式と出力先ファイルの設定

出力端末はset terminalで設定できます。これは対話的なウインドウや出力するファイルの種類のための出力形式を指定します。
set terminalの引数を省略した場合は利用できる出力形式を表示できます。show terminalで現在の出力形式の設定を確認できます。

よく利用される出力形式として対話的なウインドウでは

qt :QTを利用したクロスプラットフォームのディスプレイ
wxt :WxWidgetを利用したクロスプラットフォームのディスプレイ
x11 :UNIX系のディスプレイ
windows :Windowsのディスプレイ

があります。

また、ファイル出力のための出力形式では、

pdfcairo, pngcairo, epscairo等: cairoとpangoライブラリを利用
png, jpeg, gif等: libgdライブラリを利用

があります。利用されているライブラリの違いによって、描画やフォントの処理に違いが現れます。

面白い出力形式としてdumbもあります。これは端末上にグラフを出力する形式で以下のように出力できます。

出力先の設定はset outputで設定できます。引数を省略した場合は標準出力に設定され、show outputで現在の出力先を確認できます。

plotコマンドの構文と線を引く

plotコマンド構文はgnuplotのドキュメントより

のようになります。定義(definition)、関数(function)、データ(data source)は描画するグラフのデータ指定を行い、keyentryは凡例の行を増やすことができます。

keyという単語は鍵という意味を思い浮かぶ人もいるかもしれませんが、グラフの用語では凡例を意味する単語でもあります。

この構文の中でこの記事でよく利用する形式は、

になります。

また、データファイルを利用したplotコマンドの構文は同じくgnuplotのドキュメントより

のようになります。usingはデータ列の選択に利用します。他のものの詳しい内容については省略させてもらいます。

plotコマンドで線を引きたい場合は、withでlinesを指定すると線を引くことができます。

plotコマンドの例

行の末尾に"\"を入れることでコマンドを複数行にすることができます。
また、ファイルの指定を空文字列にすると前回指定したファイルを再利用できます。

コマンド例と実行結果

線を引くと同時に点も入れたい場合は、withでlinespointsを指定すると線を引くと同時に点を入れることができます。

plotコマンドの例

凡例(key)の構文と設定の確認

凡例にかかわる構文はgnuplotのドキュメントより以下のようなものがあります。詳しい内容に関してはドキュメントの方を参照してください。

凡例のグローバルオプション

凡例の配置オプション

凡例のレイアウトオプション

show keyを用いると凡例の設定の確認を行うことができます。

設定の確認

始めの例として用いた

はデモスクリプト(custom_key.dem)から借りた記述ですが、構文を見るとreverseとLeftの順序が入れ替わっているので、set keyの構文はプログラムの方で少し柔軟に解釈してもらえるかもしれません。

省略形

コマンドの省略形

コマンドは曖昧にならない程度に先頭にある文字で省略を行うことができます。
例として

plot -> p
using -> u
with -> w
lines -> l

のように省略できます。

コマンドを省略した例

withの構文とその他の省略形

単語の頭文字同士を組み合わせた省略形になっているものもあります。これらの多くはwithで利用されることが多いです。
withの構文はgnuplotのドキュメントより

のようになっています。詳しい内容についてはgnuplotのドキュメントを参照してください。

空のファイル名とパイプからの入力

空のファイル名を指定すると直前のファイル名を再利用することができます。
また、popen関数が働くシステムでは、最初に"<"の文字を入れることで、シェルコマンドからパイプ入力を行うことができます。

command_abbreviation.gp

fdopen関数が働くシステムでは、"<&n"でn番目のファイルディスクリプタを用いて入力を行うことができます。
これにより、1回のシェルコマンドの呼び出しで複数のデータファイルからのパイプ入力が容易になります。

"<(command)"はシェルの機能にあるプロセス置換といいます。プロセスの入力をファイル名として扱うことができます。

データ列の選択(using)

usingは

のように利用します。'format'はこの記事では利用しませんが、C言語のscanf関数のようにデータを読み取ることができます。

<entry>は

  • フィールド選択のための単なる列番号 ex)1,2,3,…
  • 先頭行の列ラベルの文字列 ex) "Age", "Height" 等
  • 括弧で囲んだ数式 ex) ($2+$3), ($2>10 ? $2 : $3), (f($1)) 等
  • 括弧で囲まなくてよい特別な関数 ex) xticlabels(2) 等

になります。

括弧で囲んだ数式を用いる場合、列の値はcolumn(1)のように指定でき、その略記が$1, $2になります。

<entry>が2つある場合は、<xの値>:<yの値>のように扱われます。
エラーバー等を用いると3つ以上の<entry>を用いることもあります。
using 1のような<entry>が1つの場合は、その<entry>はyの値として扱われ、using 0:1と同じ意味になります。

0は疑似列で、gnuplotがデータに対して自動的に連番を振った値になります。

データ列から凡例名を取得

set key autotitle columnheaderを用いるとデータファイルの先頭行を凡例のとして用いることができます。
また、columnhead関数を用いると指定した列の名前を取得することができます。2つ以上の列の計算を用いた場合等に利用すると便利です。

autotitle.gp

data_key.dat

コマンド例

testコマンド

'test'または'test terminal'は設定されているterminalでサポートしている線や点のスタイル等を網羅的に確認できます。
点や線のスタイルとその色の番号が一緒になっていて簡潔に表示されている点は少し気を付けるべきかもしれません。

また、'test palette'は現在の色の設定'palette'を確認できます。

コマンドラインオプション

gnuplotコマンドのコマンドラインオプションを一部紹介します。

プログラム終了後もプロットウインドウを維持(-pオプション)

-p(--persist)オプションは、gnuplotのプログラムが終了した後でもプロットウインドウが終了しません。

ファイルを読み込む前にコマンドを実行(-eオプション)

-eオプションはファイルを読み込む前にコマンドを実行できます。

参考

gnuplot homepage