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」はいかがだったでしょうか?
ヘッダーファイルのみで対応できてしまうというお手軽なものでした。
今後も何かお手軽なライブラリがありましたら紹介したいと思います。
関連記事
- 
                                                第1回 Visual C++で作成したDLL内のクラスをC#で利用する方法 こんにちは、ILCです。 Visual C++ (以下 VC++)で作成されたDynamic... 公開日:2024.01.19 更新日:2024.01.19 tag : Windows 
- 
                                                
- 
                                                
- 
                                                第1回 ラズパイを使用したBLE通信 ~ ディスプレイ、キーボード、マウスを接続しないで設定 前編 ~ こんにちは、GTです。よろしくお願いします。 最近業務でラズパイのBluetooth機能を使... 公開日:2021.12.24 更新日:2021.12.24 tag : Bluetooth Raspberry Pi 
- 
                                                【新機能探訪】Android 13から導入された『アプリごとの言語設定』 こんにちは、KNSKです。よろしくお願いします。 今回は Android13の新機能である『... 公開日:2022.12.09 更新日:2022.12.09 tag : スマートデバイス 
- 
                                                こんにちは。WwWです。 システム系の開発をしていると様々な問題が起こります。 そこで今回は... 公開日:2023.04.28 更新日:2023.04.28 
 
                                                     
                                                     
                                                     
                                                     
                                                    