われがわログ

最適化アルゴリズムとかプログラミングについて書きたい

C++でのグラフ描画

C++から使用できるグラフ描画ライブラリを探したのでメモ。

matplotlib/MATLAB使いはmatplotlib-cppが一番使いやすいと思う。 ただし、Windows環境において、PythonをAnacondaでインストールしているとpython38_d.libがないためDebugビルドが通らない(38の部分はインストールしているPythonバージョンにより変化)。 したがって、pyconfig.hを編集してpython38.libへのリンクに変更するか、Releaseビルドのみで開発するかの二択になり、どちらも辛い。 matplotlib-cpp専用のPythonをいれるという手もあるが、それは負けた気がするので却下。 また、同プロジェクトは1.9kものstarを得ているにも関わらず、ドキュメントがexampleファイル以外ないという点も不安を感じさせる。

その他グラフ描画ライブラリはQCustomPlotPLplotDISLINなどがあるが、 これは触ってない。

探し回った末、学部以来懐かしのgnuplotを使うことにした。 gnuplotのラッパもいくつかあるが、今は以下のものを使っている。

github.com

多機能というわけではないが、そこまで凝った可視化をするわけではないのでこれで十分。 Header onlyなライブラリなので、インストールしやすいのも良い。 gnuplotを使う上で不便な点は、gnuplotが数式以外はファイルを通してでしかプロットできないことだ。 いちいち一時ファイルを作らねばならず、会社のPCだとウイルスチェックのせいか描画の際にいちいち数秒待たされる。 popen()が遅い模様。ウイルスバスターェ。。

追記

実は、gnuplotにはデータブロック という機能があり、コマンドからデータを入力できる。これをADAPT-GPM2から使用できるよう機能追加・プルリクを送り、無事マージされた。 大規模データだったり、記憶媒体がHDDの場合には多少速くなるはず。

takeno.iee.niit.ac.jp

参考

ameblo.jp

kenkyu-note.hatenablog.com

追記

Hacker Newsでみかけたやつ

github.com