c++でmatplotlibを使う
pythonには非常に強力なグラフ描画ツール,matplotlibというものがあります.
c++にも何か良いグラフ描画ツールがないかと探してみたところ...
なんと,matplotlib-cppなるものを発見してしまいました.
世の中には便利なものを作ってくれる人がいるもんですね!
ありがたや,ありがたや.
matplotlib-cpp
matplotlib-cppはこちらのgithubにあがっているので、適当な場所にcloneしてきましょう。
このmatplotlib-cppはヘッダファイルをインクルードするだけで使えるようになるので非常に簡単です。
このヘッダファイルはpythonとmatplotlibに依存していますので、インクルードディレクトリとライブラリパスを指定するのをお忘れなく。
python-matplotlibのインストール
ubuntuには元からpython2.7が入っていますので大丈夫ですが、matplotlibは元から入っているわけではないので、必要な方は以下のコマンドでmatplotlibを入れましょう。
$ sudo apt-get install python-matplotlib
サンプルコード
説明するよりコードを見たほうが早いと思うので、以下にサンプルコードを示しておきます。
#include <matplotlib-cpp/matplotlibcpp.h>
namespace plt = matplotlibcpp;
int main(){
int n = 1000;
std::vector<double> x(n), y(n);
for(int i=0; i<n; ++i) {
x[i] = 2 * M_PI * i / n;
y[i] = sin(x[i]);
}
plt::plot(x, y);
plt::show();
}
0~2πの範囲を1000分割にして、y=sin(x)のグラフを表示するサンプルプログラムになります。
xとyのvectorを作ってあげてそこにxとyの点を次々に追加していきます。
後はplot(x,y)とするだけで描画されます。
このように,ほとんどpythonのmatplotlibと同じように使うことができるので、とても簡単です.
コンパイル
<makefile>
コンパイルするときには、-Iオプションでヘッダファイル(matplotlibcpp.h)の場所を明示してあげる必要があります。
また、pythonに依存していますので、そちらのインクルードパスとライブラリパスを明示してあげるのもお忘れなく。
$ g++ sample.cpp -I/usr/include/python2.7 -lpython2.7 -I/hoge/piyo/matplotlib-cpp
matplotlib-cppを/usr/includeに置いて、以下のように使うのがスマートでしょうか。
(gccはデフォルトで/usr/includeディレクトリのヘッダファイルを探しに行ってくれるので)
#include <matplotlib-cpp/matplotlibcpp.h>
$ g++ sample.cpp -I/usr/include/python2.7 -lpython2.7
<cmake>
cmakeの方はこちら
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
target_link_libraries(hoge ${PYTHON_LIBRARIES})
実行結果
上記サンプルコードを実行すると、このような結果なります。
これでc++でもpythonのmatplotlibと同じような感覚でグラフを手軽に描画できますね!