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++ .
4 réponses
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();
}
}
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