Avance.Lab

技術紹介

C++のライブラリ[matplotlib-cpp]の紹介

公開日:2023.01.27 更新日:2023.01.27

tag: Windows

C++の開発をしていて良いことといえば、自作のクラスの作成です。
かゆいところに手が届き、自分の好きなようにカスタマイズできます。

しかし、デメリットとしては工数が大きくかかってしまうということ。
色々細かく設定できる分、作る時に手間が大きくかかってしまいます。

そこで、今回はちょっとアプリの修正をしたいけれど、工数はかけれない。
そういった場合にこんな便利なライブラリを使用してみてはいかがでしょう?という紹介です。

ライブラリにはどんなものがあるの?

ライブラリといいましたが、種類もたくさんあります。

  • ネットワーク系
  • データベース操作系
  • 数値計算系
  • GUI系

などなど・・・

そんな中で今回はGUI系でグラフ描画に特化しているライブラリ「matplotlib-cpp」を紹介したいと思います。

matplotlib-cppとは?

このライブラリはPythonのmatplotlibというグラフ描画ライブラリをC++から呼び出せるようにするライブラリになります。
しかもこちらのライブラリ、ヘッダーファイルのみのため導入しやすいのです。

使い方は簡単です。ヘッダーファイルをincludeし、matplotlib関数を呼び出すだけです。
※ただし、matplotlibはPythonですので、Pythonがインストールされた環境でないと動きません。
今回使用したPythonバージョンは3.9です。

実際に動かすと?

では実際に動くコード書いてみましょう。
まずは簡単なグラフ表示から。

#include "matplotlibcpp.h"
void main()
{
  // 第一引数はX軸の値、第二引数はY軸の値を設定。
  matplotlibcpp::plot({2, 2}); 
 
  // 図の表示指示。
  matplotlibcpp::show();   
}

上記のコードを実行した結果がこちら。

C++でPythonのグラフが表示されました!
たったこれだけでグラフ描画がされますのでお手軽ですね。

ではこのグラフを少しいじってみましょう。

#include "matplotlibcpp.h"
void main()
{
  // データ
  vector<double> x{ 1, 2, 3, 4 };
  vector<double> y{ 3, 4, 6, 8 };
  
  // タイトル変更
  matplotlibcpp::title("Plot Test");

  // プロット
  matplotlibcpp::plot(x,y);
  matplotlibcpp::show();
}

配列を使用してグラフに動きをつけてみました。

こちらの配列へリアルタイムで取得したデータを入れることでリアルタイムでのデータ表示ができます。
以下はサンプルです。

#include "matplotlibcpp.h"
void main() 
{
  while () {
    // グラフクリア
    matplotlibcpp::clf();

    // グラフ表示
    matplotlibcpp::plot(X, Y);

    // 処理停止
    matplotlibcpp::pause(0.01);
}

このように、ループ処理でグラフ表示と消去を繰り返すことでリアルタイムでデータが表示されるようなグラフを作成することもできます。
※plotの引数に渡しているXとYの値がリアルタイムで更新されていることを想定しています。

まとめ

今回紹介したC++のライブラリ「matplotlib-cpp」はいかがだったでしょうか?
ヘッダーファイルのみで対応できてしまうというお手軽なものでした。
今後も何かお手軽なライブラリがありましたら紹介したいと思います。

mit 3

小物集め大好きな3児の父。
最近はゴルフにはまっています。

関連記事