gnuplotの利用及びその周辺ノウハウ

ファイルに書きだしたデータをプロットする

標準的な使い方

gnuplotはコンソールでいろいろなコマンドを入力します。

コンソールでgnuplotと打つと、gnuplotのコンソールになります。

gnuplotの終了には"exit"あるは"quit"と入力します。

xxxx.datというファイルに横軸、縦軸のデータが空白区切りで入っていたとする。たとえば、

0.000000 0.127895
0.100000 0.147256
...
9.990000 0.376639
10.00000 0.374756
のように。

このとき、gnuplotでは

gnuplot> plot "xxxx.dat"
のように入力するだけである。

もし、カンマ区切りのcsv形式ファイルだとすると、

gnuplot> plot "xxxx.csv" using '%lf,%lf'
のように、形式を指定する。

コンソールのコマンドライン(シェル)で直接gnuplotにデータを流し込む

gnuplot -p -e "plot '-'" < xxxx.dat
gnuplot -p -e "plot '-' using '%lf,%lf" < rc_euler.csv
のようにもできる。

- コンソールでは入力はキーボードから行うことになっているが、これをファイルからの入力に切り替えることを"redirection"と言います。これは < で表します。(ちなみに出力を画面ではなく、ファイルに切り替えるとには > を用います。Cプログラムのprintfによる出力を実行時にファイルに書き出すには、これを用いると便利です。

Cのプログラムからgnuplotを利用する

テキストの付録Aにこの方法が載っています。

それを参考にすれば良いのですが、上記のデータのような場合にはちょっと工夫が必要です。

次の例を参考にしてください。

/*
     gnuplotにデータを流し込んで(pipeline)、プロットする
 */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[]) {
  FILE *gp;
  double x,y;

  gp  = popen("gnuplot -p", "w"); // プログラムが終わってもgnuplotを閉じないために"-p"をつける
  fprintf(gp, "plot '-'\n"); // '-'はデータは後から流し込むことの意味

  for (x=0.; x<=10; x+=0.02) {
    y = sin(2.0*x) + sin(3.0*x);
    fprintf(gp, "%f %f \n", x, y); // データをgnuplotへ出力
  }
  fprintf(gp, "e"); // データの終わりの印 "e"

  return 0;
}