web-dev-qa-db-ja.com

Cプログラムでデータをプロットする方法は?

私は、Cプログラミングの知識が限られている機械エンジニアです。シミュレーションを行うためにいくつかのコードを作成し、シミュレーション結果を視覚化したいと思います。現時点では、コードの作成にDev-Cを使用しています。 fopenおよびfprintfコマンドを使用して、結果を含む.datファイルを生成します。次に、GNUPLOTプログラムを開き、.datファイルをインポートして結果をプロットします。これには時間がかかり、シミュレーションが終了するまで待つ必要があります。プロッターをDev-Cに接続する簡単な方法はありますか。そのため、プロッターはシミュレーション中にデータのプロットを開始しますか?任意のライブラリなど。

20
CrazyHorse

すでにgnuplotを知っているので、最も簡単なことは、プログラムからgnuplotを呼び出してデータをパイプすることです。

FILE *gnuplot = popen("gnuplot", "w");
fprintf(gnuplot, "plot '-'\n");
for (i = 0; i < count; i++)
    fprintf(gnuplot, "%g %g\n", x[i], y[i]);
fprintf(gnuplot, "e\n");
fflush(gnuplot);
13
Edgar Bonet

ファイルへの書き込み中の1つの解決策は、ファイルへの書き込み時にsystem()呼び出しを行い、gnuplotを呼び出すことです。

しかし、それは毎回ファイル名を変更する必要があることを意味しますが、毎回少量のデータを送信しているため、正しく表示されないことを恐れています。

http://www.gnu.org/software/libc/manual/html_node/System-Calls.html

私はgnuplotを使用したことはありませんが、このページ( http://gnuplot-tricks.blogspot.com/ )を見ると、これをうまく機能させるためのコツが見つかるかもしれません。

しかし、自分ですべてをプロットしてgnuplotをスキップしない限り、そのまま待つ必要があるかもしれません。

GnuplotのCインターフェースが役に立つかもしれません:

http://ndevilla.free.fr/gnuplot/

3
James Black

私は PLPlot をCからのプロットに使用してきましたが、効果的で簡単なことがわかりました。クロスプラットフォーム、オープンソースであり、豊富なプロット機能をサポートしています。開始するには、例を参照することをお勧めします。

2
kallikak

私はgnuplotでのリアルタイムプロットに関して他の人々が何をしたかを見るために周りを見回したが、これを見つけた:

http://users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html

プロットを駆動できる小さなPerlスクリプトがあり、情報をパイプするだけです。

データはファイルに書き込まれているため、tail -f yourdata.datそして、それをリアルタイムプロッターにパイプします。

また、stdioファイル呼び出しを使用しているため、定期的にフラッシュする必要があります(fflushを呼び出して)

明らかに、シミュレーションはバックグラウンドまたは別のシェルで実行されます。そうすれば、シミュレーションを中断することなく、いつでもプロットから抜け出すことができます。

それがあなたの役に立つことを願っています。

0
paddy