[Windows] C++からmatplotlibでグラフを表示する方法

制御シミュレーションでPythonやC++を使うことが増え、その結果を手軽にグラフ表示したくなることが多くなってきました.

シミュレーションの結果はCSVで書き出してMicrosoft Excelでグラフ化するなどしてますが、もっと手軽にする方法を見つけたのでメモします.

この方法はAtsushiさんの[C++のコードから簡単にmatplotlibを使ってグラフを作成する方法]を参考に会社などWindowsしか選べない環境でC++からmatplotlibを使う方法です.

環境

  • Windows 10 - 64bit (Windows 7など)
  • Anaconda (Python 2.7, 3.5, 3.6いずれでも)
  • Visual Studio 2013, 2015, 2017 いずれでも

1. Visual Studio 2017の場合

 環境変数VS150COMNTOOLSを設定。Visual Studio Build Toolsとしてデフォルトのパスにインストールしている場合は、"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\"

その他はご自分の環境に合わせて. Visual Studio 2013, 2015の場合はデフォで設定済みになっています。

2. Matplotlib-cppを取得し、設定

Chachay/matplotlib-cppからクローンし、Contrib/WinBuild.cmdをエディタで開き、環境に合わせて設定。


if NOT DEFINED MSVC_VERSION set MSVC_VERSION=12または14,15
if NOT DEFINED CMAKE_CONFIG set CMAKE_CONFIG=Release
if NOT DEFINED PYTHONHOME set PYTHONHOME=Pythonフォルダへのリンク

3. ビルドして実行

コマンドプロンプトやPowerShellでcontribフォルダを開き、Contrib/WinBuild.cmdを実行. examples/build/releaseにサンプルファイルがリリースされているはず. 


4. 自分のファイルは?

cmakelist.txtを参考にどうぞ!

環境


1. [準備] Libpython27.aの入れ替え

後述の工程でg++を使ってのコンパイル時に
libpython27.a: error adding symbols: File format not recognized
などというエラーが出てくるのでその対策をしておきます.
(最初はPython2.7のインストールで何かを間違えたかと思いましたが、
 良くあることらしくいくつか事例を見かけました.→ 事例① 事例② 事例③ )

以下は元はと言えば64bit版環境を構築する説明ですが、これを参考にlibpython27.aを置き換えました.
You can try to make libpython27.a or download from here (tip: you can unpack installer with 7-Zip). Make sure that you put libpython27.a in C:\Python27\libs directory.
Windows Installation Guide · Valloric/YouCompleteMe Wiki · GitHub 
ものぐさなので自分ではビルトしないことにしました
    libpython27.aをダウンロードしてしまう方法
  1. ここからlibpython-2.7.10-cp27-none-win32.whlをダウンロード
  2. 7Zipとして解凍
  3. 中に入っているlibpython27.aをC:\python27\libsへコピー (上書き)


2. [準備] matplotlib-cppの準備

Githubのリポジトリからmatplotlib-cpp-starterをダウンロードしてきます.
これを(Windows用に?)、少し改変します.
  • matplotlibcpp.h
    • 13行目
      #include <python2.7/Python.h>を#include <Python.h>に変更
  • main.cpp
    • #define M_PI 3.14159265などと追加

3. matplotlib-cppのサンプル実行

コマンドプロンプトでの実行用にバッチファイルを書きます.
(build_and_run.shの代わりになるファイル)

main.cppと同じフォルダにbuild_and_run.batファイルを作り、中に、
g++ ./main.cpp -lstdc++  -std=c++11 -I"C:\python27\include" -L"C:\Python27\libs" -lpython27 -o test && test
Pause
と書きます.

これを実行するとサンプルがコンパイルされて、以下が表示されるはずです.
(Atsuhiさんの見本と違う結果ですが2016/03/16現在は以下の結果になるmain.cppが添付されています)

4. 使い方


Gnuplotをパイプするより簡単で助かります!!


参考

[1] C++のコードから簡単にmatplotlibを使ってグラフを作成する方法 - MyEnigma 

[2] MinGWのインストールと使い方(2014年版) 

[3] Matplotlibの使い方 : matplotlib入門 - りんごがでている  http://bicycle1885.hatenablog.com/entry/2014/02/14/023734

[4] Windows Installation Guide · Valloric/YouCompleteMe Wiki · GitHub 

No comments:

Post a Comment