タイトルのとおりである。GitHubで公開しているGnuplotライブラリADAPT-GPM2を、以下の図のように、軸を数値ではなく文字列にできるようにした。
#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縛りがあるので、使いたくても使えないのだ。代わりに必要になったら全部自作している。