プログラミング

C++でグラフ描画をするならmatplotlib-cppを使ってみる?

matplotlib-cpp

はじめに

最近ではPythonが人気ですね.

なぜ人気かと言われれば,複雑な処理も簡潔なコードで済むからです.

型の明記も要らなければ,ほとんどの数学的処理もNumPyで済み,グラフもmatplotlibがあればあっという間に描画可能です.

一方C++はどうでしょうか?

型の明記は必要だし,グラフ描画も慣れていないと一苦労です.

そこで,C++でmatplotlibを使って簡単にグラフを書こう,というのがこの記事の趣旨です.

前置きが長いと嫌われますので,さっそく見ていきましょう.

matplotlib-cpp

PythonのmatplotlibをC++から呼び出せるヘッダオンリなライブラリが存在します.

それがmatplotlib-cppです.

lava/matplotlib-cpp: Extremely simple yet powerful header-only C++ plotting library built on the popular matplotlib

いまだにちょくちょく更新されていて,機能がmatplotlibに近づいている印象です.

主に必要なものはPythonとNumPy.

細かい話は置いといて使い方をひたすら解説していきます.

installation

この記事で必要なのは"matplotlibcpp.h"だけなので,それだけ落としてください.

この後CMakeLists.txtも書きますが,サンプルコードを書くmain.cppと合わせて,以下のようなディレクトリ 構造です.

これだけでとりあえずOK.

あと,僕の手元では以下のコード(line: 301-307)でRedefinitionエラーになっていたので,コメントアウトして対処しました.

※ 2020.04.22の更新で追加されたコードらしいので,もしかしたらみなさんの落としたコードによっては以下のコードは別のコードに書き換わっているかもしれません.

力技な対処ですが,処理に問題がなかったので良しとします.

CMakeLists.txt

個人的にはこれを書いてMakeするのがお勧めです.

今回は,C++11でプロジェクト名が「plt」としています.

こんな感じ.

cmakeの最低保証バージョンはなんでもいいです.

ビルドと実行の仕方は,

です,簡単ですね.

ちなみに一度cmakeしたら,それ以降はmakeだけでOKです.

それではサンプルコードをmain.cppに書いていきます.

動作確認

とりあえず動作確認として,簡単なコード書きましょう.

matplotlib-cpp sample1

うまく描画されていますね.

ひとまず,PythonとNumPyが認識されているようです.

vectorでx, yを指定する

これが普通の使い方でしょうか.

とりあえずサインカーブを書いてみます.

matplotlib-cpp


凡例をつける

複数のグラフを描画する際には,グラフに凡例を付けたいときがあります.

matplotlib-cpp

このように named_plot() を使うか,mapを使って実際のmatplotilbの引数名に値を渡すことで解決できます.

また,この際色々なグラフオプションを利用可能です.

matplotlib-cpp

複数グラフの描画

複数のグラフを別々で描画したいときは,Pythonのmatplotlib同様, subplot が使用できます.

matplotlib-cpp

おわりに

今回はmatplotlib-cppという,PythonのmatplotlibをC++で呼びだすライブラリを紹介しました.

この記事では,基本的な機能しか紹介していませんが,サムネでもあるような3Dグラフも描画できます

matplotlib-cpp

他にも,両対数グラフ( loglog() )やヒストグラム( hist() ),エラーバー( errorbar() )なども描画可能です.

まあ,なんといってもmatplotlib-cppはC++にしては少量のコードでグラフを描画できるのが良い所だと思います.

まだ不具合も少しありますが,まだ頻繁に更新されていますので,これからさらに使い勝手が良くなるでしょう.

ヘッダオンリなのも僕は好きです.

みなさんも使ってみては?


スポンサードリンク