1.gnuplot
この文書では,gnuplot のバージョンは,4:0 を想定しています。4:0 では3
次元グラフの視点をマウスでグリグリ動かせたり,2 次元グラフでもズーム
イン・ズームアウトとかがマウスで出来たりしてかなり快適です。ネットか
ら取ってくる場合は,http://www.gnuplot.info/からダウンロードできま
す。Linux でコンパイルする場合,./configure,make,make install で
OK です。Windows 版もあります(gp400win32.zip)。
C/C++からWindows 版のgnuplot を使う場合は,wgnuplot.exe ではな
く,pgnuplot.exe を使うようにして下さい。これはwgnuplot.exe をパイプ
対応にしたもので,gp400win32.zip の中に入っています。
1.C/C++から使う
gnuplot は標準入力からコマンドを読み込んで実行するようになっている
ので,popen() でパイプをつないでしまえば,あとはfputs() とかでコマン
ドをパイプ書き出せばOK です。
Linux で使う場合は,次のような感じでいけます。gnuplot をパイプから使
う場合,最初にset mouse をしておかないと開いたウィンドウでマウスが使
えないみたいです。
|
パイプを用いた gluplot の制御
|
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
FILE *fp = popen("gnuplot", "w");
if (fp == NULL)
return -1;
fputs("set mouse\n", fp);
fputs("plot sin(x)\n", fp);
fflush(fp);
cin.get();
pclose(fp);
return 0;
}
|
Windows(Visual C++)で使う場合は,popen(),pclose() 関数ではな
く_popen(), _pclose() 関数を使います。それから最初にset mouse を実行
しなくても,マウスが有効になっているみたいです。ということで,VC で
はこんな感じでいけます。
|
Visual C++ からの制御
|
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
FILE *fp = _popen("pgnuplot.exe", "w");
if (fp == NULL)
return -1;
fputs("plot sin(x)\n", fp);
fflush(fp);
cin.get();
_pclose(fp);
return 0;
}
|
3.Gnuplot クラスを作ってみました
上記のような感じでC/C++からgnuplot を使うのは簡単なのですが,もう
少し便利に使えるようにGnuplot クラスを作ってみました。いちおうウリは
次のような感じです。
- Linux gcc,Visual C++,cygwin gcc のどれでもコンパイル可能。
- std::vector に入ったデータをそのままプロットできるメソッドがある。
以下の場所に置いておくので,よろしければ使ってみて下さい。
http://www.cvl.iis.u-tokyo.ac.jp/~kudoh/gnuplot_class.tar.gz
クラスの本体は,gnuplot.cpp,gnuplot.h です。簡単なものですがマニュ
アルっぽいものが入っています。また,サンプルプログラムも入っています。
これを使うと,sin 関数のグラフを表示するのは次のようになります。
|
Gnuplot クラスの使い方
|
Gnuplot gp;
gp.drawFunction("sin(x)");
|
またstd::vector の要素もサクッとプロットできます。
|
std::vector のグラフ化
|
vector v1(50);
...
gp.plotX(v1, "v1");
|
(x; y) をプロットするGnuplot::plotXY() メソッドや,3 次元のプロットを
するGnuplot::plot3DXYZ() もあります。
バグとかアドバイスとかありましたら,メールでお知らせ下さい。(July, 2004)
|