I've hit a roadblock with pgfplots where it has difficulty plotting multiple functions at the same time in 3D. As it states in the manual on page 114, "it cannot combine different \addplot commands, those will be drawn in the order of appearance." So something that should be behind another object might not be if you plot it last.
Does this same roadblock occur in gnuplot and Asymptote? I'd prefer to stay open source, but will move to Mathematica or Maple if I have to. And the quality/prettiness of the graphics is important to me, which is one reason I wanted pgfplots to work!
$\endgroup$5 Answers
$\begingroup$If you want quality/prettiness, then Mathematica is probably the best that we have. MATLAB has been revamping its graphics but it's still pretty coarse and many issues remain.
$\endgroup$ $\begingroup$You can try using Matlab. After generating a plot you require hold on and I think it solves your problem. They are not the prettiest, but they work well enough.
$\endgroup$ $\begingroup$DataMelt mathematical visualization program is a good start for drawing 3D surface plots, functions and data points. It is a free program licensed under the GNU public license.
$\endgroup$ $\begingroup$Give CalcPlot3D a shot. It easily handles ridiculous huge functions, multiple graphs, a few coordinate systems, in implicit or parametric, with 5 adjustable parameters.
$\endgroup$ $\begingroup$Just thought I would mention for those with less money and/or more programming knowledge, Python has matplotlib, which is quite similar to matlab's plotting capability (except free and more flexible to use). There is also plotly.
R also has 3d plotting capability (e.g. see here). The "free Matlab" Octave is also an option.
Finally, for complicated, huge functions that are moving in time (i.e. animating evolving surfaces, large meshes, or vector fields of data in the, say, millions of points), which one wishes to look at (rotate, translate, zoom) as it moves, very few tools can cope. The only solution I have found is to write my own OpenGL visualizers in these cases. Pretty much every language has bindings for this and performance will never be an issue again :)
$\endgroup$