【C++】C++からPythonのmatplotlibを使う
はじめに
C++を使ってデータ処理をしていると、Pythonの豊富なライブラリを手軽に使える環境がうらやましいと思うことがあります。その中でも簡単にさまざまな種類のグラフを表示できるmatplotlibはひときわ便利な存在です。
実は、C++でもmatplotlib-cppというライブラリを使うことで、Pythonのmatplotlibを呼び出し、直接グラフを表示できます。
今回は、このmatplotlib-cppの使い方について調べました。そのメモです。
入手
matplotlib-cppのGitHubからmatplotlibcpp.h
をダウンロードします。もしくはリポジトリをcloneします。
使い方
matplotlib-cppを使うには、事前にPythonとmatplotlib, NumPyのインストールが必要です。これらをあらかじめインストールしておきます。
matplotlib-cpp本体はヘッダファイルだけなので、C++のソースコード内でインクルードするだけで使うことができます。
Linuxの場合
ビルド時にPythonのインクルードファイルとライブラリへのパスを指定します。GCCなら以下のようになります。
Pythonのインクルードファイル、ライブラリへのパスは、インストールされているバージョンに合わせます。
Windowsの場合
Windowsの場合、いくつか躓くところがありますので注意が必要です。
ソースコードの修正
入手してきたmatplotlibcpp.h
は、そのままでは使うことができません。コンパイルしようとすると、select_npy_type<long long>
, select_npy_type<unsigned long long>
が重複定義されているとのメッセージが出てくるはずです。
matplotlibcpp.h
のコードを読むと、select_npy_type<long long>
を定義している付近に、
とあるので、以下のように定義部分をコメントアウトして置きます。
これでエラーが出なくなります。
ビルド
Windowsでは以下のパスが必要です。あらかじめこれらのパスを調べておきます。
- Pythonのインクルードファイル
- NumPyのインクルードファイル
- Pythonのライブラリ
Windowsの場合、Pythonのデフォルトのインストール先はC:\Users\ユーザー名\AppData\Local\Programs\Python
と長いので環境変数INCLUDE
やLIB
に登録しておくのが良いです。
また、WindowsではGCCでビルドできません。MSVC(cl.exe)かClangを使う必要があります。
MSVC(cl.exe)
Clang
CMake
CMakeを使う場合は、以下のようにCMakeLists.txt
を書きます。PythonやNumPyのパスを自動的に検索してくれるので、CMakeの使える環境であれば、こちらの方がラクです。
find_package(Python COMPONENTS Development NumPy)
を使うと、PythonとNumPyのパスを自動的に探し出してくれます。最後のREQUIRED
は必須という意味です。Pythonのパスを探すためにはCMakeのバージョンが3.12以降、NumPyのパスを探すためにはCMakeのバージョン3.14以降が必要です。
find_package(Python)
についての詳細はCMakeの公式ドキュメントを参照してください。
Makefileを作る場合、デフォルトではDEBUGビルドで生成しますので、(とくにWindowsの場合)ビルドタイプをReleaseにしておく必要があります。
使用例
Pythonのmatplotlibと同じような書き方で使うことができます。
出力結果
そのほかいろいろなグラフを書くことができます。どのようなグラフを書くことができるかは、GitHubのリポジトリにあるサンプルコードが参考になります。
おわりに
以上でC++でPythonのmatplotlibを使うことができるライブラリ、matplotlib-cppについて使い方をまとめてみました。Windowsでは使い方で少し注意が必要な点がありますが、本家matplotlibと似たような書き方で簡単にグラフが表示できるので、今後も使ってみたいライブラリです。
ディスカッション
コメント一覧
まだ、コメントがありません