[C++]Gnuplotライブラリを各軸の文字列表示に対応させた。Gnuplotライブラリ更新(2)。

 タイトルのとおりである。GitHubで公開しているGnuplotライブラリADAPT-GPM2を、以下の図のように、軸を数値ではなく文字列にできるようにした。

f:id:thayakawa:20200626000858p:plain

#include <ADAPT/GPM2/GPMCanvas.h>

using namespace adapt::gpm2;

int main()
{
    std::vector<std::string> x;
    std::vector<double> y;

    x.push_back("label-one");   y.push_back(1);
    x.push_back("label-two");   y.push_back(2);
    x.push_back("label-three"); y.push_back(3);
    x.push_back("label-four");  y.push_back(4);
    x.push_back("label-five");  y.push_back(5);
    x.push_back("label-six");   y.push_back(6);
    x.push_back("label-seven");   y.push_back(7);
    x.push_back("label-eight"); y.push_back(8);
    x.push_back("label-nine");  y.push_back(9);
    x.push_back("label-ten");  y.push_back(10);

    GPMCanvas2D g("string_label.png");
    g.ShowCommands(true);
    g.SetXRange(-1, 10);
    g.SetYRange(0, 11);
    g.SetXticsRotate(-45);
    g.PlotPoints(x, y, plot::style = Style::boxes, plot::title = "notitle");

    return 0;
}

 あとは少々バグフィックスされている。ついでにライセンスをMITに変更した。

 variantはマジで便利である。共用体?何それ食えんの?と言いたくなるくらい便利である。共用体はC++11である程度強化されたとは言え、それを定義するのは結構面倒くさい。variantは全部勝手に処理してくれるのでとても使い勝手が良い。今回の拡張も、ちょっとvariantにstd::vector<std::string>を追加して、以前紹介したラムダ式オーバーロードテクニックを使うだけで対応できた。C++17は本当に良いアップデートだった。……使ってないけど。私のライブラリはC++14縛りがあるので、使いたくても使えないのだ。代わりに必要になったら全部自作している。