Mathics can plot functions:

You can also plot multiple functions at once:

Two-dimensional functions can be plotted using DensityPlot:

You can use a custom coloring function:

One problem with DensityPlot is that it's still very slow, basically due to function evaluation being pretty slow in general—and DensityPlot has to evaluate a lot of functions.

Three-dimensional plots are supported as well: