Boost logo

Boost Users :

Subject: [Boost-users] boost.plot: integrating plotting in a C++ native application: general questions about which tools to use
From: Hicham Mouline (hicham_at_[hidden])
Date: 2009-12-15 17:16:38


I am writing an application with a native C++ computation engine (library)
that generates plotable data 2d and 3d, and a plotting engine.
I am trying to determine what tools/libraries to use for the plotting

My graphs are all time series in the x axis (typically dates but maybe day
I have a y axis and sometimes a z axis as well.
Data is available in std::vector/list< pair<> > or std::vector/list<
boost::tuple<> >, sometimes std::map<k,v>, perhaps later
boost::multi_array<2> or <3> as well, or in fact just native arrays of pairs
or boost::tuples.

Decisions are made by the users, tweaking parameters and seeing how the
plots change.

The application user interface will be as:
1. win command line and just the plotting being graphical
2. Linux command line and just the plotting being graphical
3. win .net interface - input of parameters to the computing engine, and
the plotting being graphical
4. Linux with X (maybe gtk/qt) - input of parameters to the computing
engine, and the plotting being graphical

And the results of the computation will then need to be plotted.

So far, I have seen these solutions:
***1 - With 1,2,3 and 4, I can see a write the numbers to a file, call the
external process on windows that runs gnuplot that runs a script file to
plot the file.
Both 2D (y(x)) and 3D(z(x,y)) visualizations are pretty flexible, in
particular 3D visualizations allow to rotate the graph and view from
different angles.
But this process seems tortuous, gnuplot accepts piped data on linux but not
on windows without mingw/cigwin. It would be preferable to not generate
intermediary files, especially if that is very large.
There is also a gnuplot c++ interface, but that doesn't avoid running the
gnuplot external process.

***2 - I've come across boost.plot and it generates svg files which have
only 2D if I understood correctly, SVG doesn't express 3D, and then use a
browser (chrome) or that tool that uses SVG as its native format, or use
ImageDisplay for e.g.( this comes with c++ dev library, perhaps that helps
to plot directly the svg without running the process externally )
Cons: no 3d (rotating and different angles) and still require external

***3 - I don't know .net but it seems c# is more convenient for the GUI part
(inputting parameters, selecting options), running the c++ computation
engine, and .net probably has some plotting part (don't know about 3D plots
and rotating though)
Cons: non portable solution - how would c# plotting interact with native c++

***4 - gtk/qt : does it have plotting features? It is ported to linux and
win, does the windows port requires cygwin/mingw?
How does it interact with STL containers?

The solution is ideally the quickest-to-deploy and most portable, with
windows not requiring cygwin/mingw, and not needing to run an external

The need for portability comes from hardware requirements machines with a
large number of processor cores run linux, while smaller boxes run win.

I appreciate there are a lot of questions here, that deal with many topics
and I thank everyone for answers or suggestions,

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at