[Windows] C言語でgnuplotを動かす

C言語からgnuplotを起動して動かすことができる。以下は、Windows用のコマンドであることに注意。
これが出来るようになると、C言語で取得したシミュレーション結果をグラフにして、名前をつけて自動でepsとemfに保存、とかも可能である。


下のプログラムは、gnuplotを起動して、sin(x)を表示するためのものである。

#include <stdio.h>
#include <stdlib.h>
#define GNUPLOT_PATH "C:/gnuplot/bin/gnuplot.exe" // gnuplot.exeのある場所
// \ではなく、/を使いましょう。
// Program FilesはPROGRA~1、Program Files(x86)はPROGRA~2に置き換えましょう


int main()
{
	FILE *gp;	// For gnuplot

	// gnuplotの起動コマンド
	if ((gp = _popen(GNUPLOT_PATH, "w")) == NULL) {	// gnuplotをパイプで起動
		fprintf(stderr, "ファイルが見つかりません %s.", GNUPLOT_PATH);
		exit(EXIT_FAILURE);
	}

	// --- gnuplotにコマンドを送る --- //
	fprintf(gp, "set xrange [-10:10]\n"); // 範囲の指定(省略可)
	fprintf(gp, "set yrange [-1:1]\n");

	fprintf(gp, "plot sin(x)\n"); 	//sin(x)を描く
	
	fflush(gp); // バッファに格納されているデータを吐き出す(必須)
	system("pause");
	fprintf(gp, "exit\n"); // gnuplotの終了
	_pclose(gp);
}

つまり、gnuplotを起動は

 FILE *gp;
 gp = _popen("gnuplot.exeのある場所", "w");

動かしたい内容のコマンドは、

 fprintf(gp, "コマンド\n");

でOK。コマンド入力後にエンターする場合は\nを忘れないように。fprintfで\を出す場合は\\でOK.
もちろん、普通のfprintfと同様に、

 fprintf(gp, "print %d+%d = %d\n",1,2,3);

とかもできる。
終了は、

 fflush(gp); // バッファに格納されているデータを吐き出す(必須)
 fprintf(gp, "exit\n"); // gnuplotの終了
 _pclose(gp);

という流れ。好みにもよるが、exitの前に、 system("pause"); を入れたほうが良い。

これを応用して、gnuplotでアニメーションとかもできる。

Back