Méthode facile et gratuite pour dessiner des graphiques et des graphiques en C++? [fermé]

je fais un peu de simulation exploratoire et je veux montrer les graphiques pour comparer les performances parmi les algorithmes au cours de l'exécution.

quelle bibliothèque vous vient à l'esprit? Je préfère ceux qui viennent petits comme j'aimerais si c'est facile pour mon instructeur de compiler mon code. J'ai coché gdchart mais ça semble trop lourd. Je veux juste une sorte de graphique X-y sur la ligne de temps.

Google chart est bien sûr hors de la question, au cas où vous avez lu cette question similaire.


poste nuages de points en C++ .

24
demandé sur nbro 2009-04-19 17:25:47

4 réponses

mon préféré a toujours été gnuplot . Il est très vaste, donc il pourrait être un peu trop complexe pour vos besoins cependant. Il est multiplateformes et il y a A API C++ .

13
répondu marcog 2015-12-08 13:22:04

honnêtement, j'étais dans le même bateau que toi. J'ai une bibliothèque C++ que je voulais connecter à un utilitaire graphique. J'ai fini par utiliser Boost Python et matplotlib . Il a été le meilleur que j'ai pu trouver.

comme une note secondaire: je me méfiais aussi de la licence. matplotlib et les bibliothèques boost peuvent être intégrées dans des applications propriétaires.

voici un exemple de code que j'ai utilisé:

#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();
    }
}
10
répondu Bill Lynch 2014-02-24 15:06:58

j'ai utilisé ce"traceur portable". Il est très petit, multiplateformes, facile à utiliser et vous pouvez le brancher dans différentes bibliothèques graphiques. pplot

(seulement pour la partie parcelles)

si vous utilisez ou prévoyez d'utiliser Qt, une autre solution multiplateforme est Qwt et Qchart

6
répondu alvatar 2009-04-19 13:36:12

Cern ROOT produit de jolies choses, je l'utilise pour afficher des données de réseau neuronal beaucoup.

5
répondu Ed James 2009-04-19 18:16:31