
ゆうき( @BASEBALLY15 )です^^
今回は,何の用じゃ?
C言語でグラフを表示する方法を教えてください・・・
了解じゃ!
今回は,C言語と『gnuplot』を使って,グラフを表示する方法を教えるぞ!
(※Visual Studio 2017を使用)
お願いします・・・

目次
どんなグラフを表示させることが出来るの?
今回ご紹介する方法を使うと,以下のように2次元や3次元のグラフを表示させることが出来ます^^
2次元のグラフ

3次元のグラフ

それでは,コードを見ていきましょう⤵
C言語とgnuplotを使ってグラフを表示させてみた!
まずは,『gnuplot』をダウンロードしておいてください.
ダウンロードするためのサイトはこちらです.
ヘッダーファイル
ヘッダーファイルを記述していきます.
#include "pch.h"
#include <stdio.h>
//数式を使う際に必要(sinなど)
#include <math.h>
今回は,数式を使うので,『math.h』をインクルードします.
コード
gnuplotでsinのグラフを表示してみよう!
まずは,sinをgnuplotを使って表示します.
void main(void)
{
//gnuplotを呼びだすために記述
FILE *gid;
//gnuplotを呼びだす
gid = _popen("c:/ooooooooo/xxxxxxxxx/bin/gnuplot.exe", "w");
//ラベル名
fprintf(gid, "set xlabel \"x\n");
fprintf(gid, "set ylabel \"sin\n");
// 範囲の指定(省略可)
fprintf(gid, "set xrange [-10:10]\n");
fprintf(gid, "set yrange [-1:1]\n");
//sin(x)を描く
fprintf(gid, "plot sin(x);\n");
//guplotの後処理
fprintf(gid, "e\n");
fflush(gid);
fprintf(gid, "pause mouse\n");
fflush(gid);
_pclose(gid);
}
これを実行すると,以下のように2次元のグラフが表示されます.

【解説】
- _popen()でgnuplotを開く(※exeファイルを使う!)
- set xlabelとset ylabelで軸名を付ける
- plotでgnuplot上にsin(x)を描く
- fflushでgid内のデータを吐き出す
- pause mouseで表示し続ける
- _pclose()でgidを閉じる
次に,3次元のグラフを表示する方法をご紹介します⤵
gnuplotで3次元のグラフを表示してみよう!
2次元グラフを表示する時のコードと大きく異なるのは以下の点です⤵
2次元のグラフの時
fprintf(gid, "plot sin(x);\n");
↓
3次元のグラフの時
fprintf(gid, "splot (x**2+y**2);\n");
plotをsplotに変えます.そして,式にxとyの2つの変数を使います.
これで,3次元のグラフを描くことが出来ます.
全体のコードを載せておきます⤵
void main(void)
{
//gnuplotを呼びだすために記述
FILE *gid;
//gnuplotを呼びだす
gid = _popen("c:/ooooooooo/xxxxxxxxx/bin/gnuplot.exe", "w");
//ラベル名
fprintf(gid, "set xlabel \"x\n");
fprintf(gid, "set ylabel \"y\n");
// 範囲の指定(省略可)
fprintf(gid, "set xrange [-10:10]\n");
fprintf(gid, "set yrange [-10:10]\n");
//x^2+y^2のグラフを描く
fprintf(gid, "splot (x**2+y**2);\n");
//guplotの後処理
fprintf(gid, "e\n");
fflush(gid);
fprintf(gid, "pause mouse\n");
fflush(gid);
_pclose(gid);
}
これを実行すると,以下のように2次元のグラフが表示されます.

終わりに
今回は,C言語とgnuplotを使ってグラフを表示する方法をご紹介しました.
この方法を使うと,例えば,画像のRGB値をヒストグラムで表すことが出来ます.
実際に,自分自身,大学の研究で画像処理を行っていて,この方法を使っています^^
ぜひ,C言語の勉強をしている方はこの方法を使ってみてください.
それでは・・・