web-dev-qa-db-ja.com

C ++でグラフやチャートを描く無料の簡単な方法は?

シミュレーションを少し調査していますが、グラフを表示して、実行時のアルゴリズム間のパフォーマンスを比較します。

どのライブラリが思い浮かびますか?インストラクターがコードをコンパイルするのが簡単であれば、私は好きなように小さいものを非常に好みます。 gdchart をチェックしましたが、重すぎるようです。単純なx-y並べ替えのタイムライングラフが必要です。

this 同様の質問を読んだ場合、Googleチャートはもちろん問題外です。


関連記事 C++の散布図

26
syaz

私のお気に入りはいつも gnuplot です。非常に広範囲に及ぶため、ニーズには少し複雑すぎるかもしれません。クロスプラットフォームであり、 C++ API があります。

15
marcog

正直なところ、私はあなたと同じ船に乗っていました。グラフ作成ユーティリティに接続したいC++ライブラリがあります。最終的に Boost Python および matplotlib を使用しました。それは私が見つけることができる最高のものでした。

副次的な注意事項として、私はライセンスについても慎重でした。 matplotlibおよびboostライブラリは、独自のアプリケーションに統合できます。

私が使用したコードの例を次に示します。

#include <boost/python.hpp>
#include <pygtk/pygtk.h>
#include <gtkmm.h>

using namespace boost::python;
using namespace std;

// This is called in the idle loop.
bool update(object *axes, object *canvas) {
    static object random_integers = object(handle<>(PyImport_ImportModule("numpy.random"))).attr("random_integers");
    axes->attr("scatter")(random_integers(0,1000,1000), random_integers(0,1000,1000));
    axes->attr("set_xlim")(0,1000);
    axes->attr("set_ylim")(0,1000);
    canvas->attr("draw")();
    return true;
}

int main() {
    try {
        // Python startup code
        Py_Initialize();
        PyRun_SimpleString("import signal");
        PyRun_SimpleString("signal.signal(signal.SIGINT, signal.SIG_DFL)");

        // Normal Gtk startup code
        Gtk::Main kit(0,0);

        // Get the python Figure and FigureCanvas types.
        object Figure = object(handle<>(PyImport_ImportModule("matplotlib.figure"))).attr("Figure");
        object FigureCanvas = object(handle<>(PyImport_ImportModule("matplotlib.backends.backend_gtkagg"))).attr("FigureCanvasGTKAgg");

        // Instantiate a canvas
        object figure = Figure();
        object canvas = FigureCanvas(figure);
        object axes = figure.attr("add_subplot")(111);
        axes.attr("hold")(false);

        // Create our window.
        Gtk::Window window;
        window.set_title("Engineering Sample");
        window.set_default_size(1000, 600);

        // Grab the Gtk::DrawingArea from the canvas.
        Gtk::DrawingArea *plot = Glib::wrap(GTK_DRAWING_AREA(pygobject_get(canvas.ptr())));

        // Add the plot to the window.
        window.add(*plot);
        window.show_all();

        // On the idle loop, we'll call update(axes, canvas).
        Glib::signal_idle().connect(sigc::bind(&update, &axes, &canvas));

        // And start the Gtk event loop.
        Gtk::Main::run(window);

    } catch( error_already_set ) {
        PyErr_Print();
    }
}
11
Bill Lynch

この「ポータブルプロッター」を使用しました。非常に小さく、マルチプラットフォームで、使いやすく、さまざまなグラフィカルライブラリにプラグインできます。 pplot

(プロット部分のみ)

Qtを使用または使用する予定の場合、別のマルチプラットフォームソリューションは Qwt および Qchart です。

6
alvatar

Cernの [〜#〜] root [〜#〜] は、かなり素敵なものを生成します。これを使用して、ニューラルネットワークのデータを多く表示します。

5
Ed James