Bug fix: Two-dimensional plots with coords

There are some bugs in changecoords in the plots package affecting two-dimensional plots that use the coords option: contourplot does not work with this option, and even plot fails with a coordinate system having parameters specified in functional style:

> with(plots):

Warning, the name changecoords has been redefined

> contourplot(x-y, x=0..1,y=0..1,coords=polar);

Error, (in plot/iplot2d) cannot convert to coordinate system polar

> plot(1, x=0..1, coords=logcosh(2));

Error, (in plot/adaptive) unknown optional argument coords = logcosh(2)

To remedy these bugs, I have written a replacement for changecoords for two-dimensional coordinate systems, called changecoords2d . This function is part of the Maple Advisor Database library . Instead of making a plot with the coords option, you can first produce the plot without the coords option and then call changecoords2d with the plot as first argument and the name of the coordinate system as second argument. All other options (e.g. scaling , colour or axes ) should be part of the first plotting command, not the changecoords2d .

Note that plot(f(x),x=a..b) plots the second variable in Cartesian coordinates, , as a function of the first variable . In polar coordinates it is more usual to plot the first variable, , as a function of the second, (and this is what plot(f(theta), theta=a..b, coords=polar) does). However, that could not be accomplished by changecoords(plot(f(x),x=a..b), polar) : it would give you as a function of . Instead of polar , you can use reverse(polar) , which interchanges the roles of the two variables and gives you as a function of . You can also use reverse with any of the other coordinate systems.

> changecoords2d(plot(cos(x),x=-Pi/2 .. Pi/2, scaling=constrained), reverse(polar));

> changecoords2d(pointplot([seq([1,7*Pi/10*i],i=0..20)], style=line, colour=blue,scaling=constrained), polar);

> changecoords2d(implicitplot(x=y,x=0..1,y=0..1),logcosh);

> changecoords2d(contourplot(x-y, x=0..1, y=0..1, axes=box), logcosh);

> changecoords2d(plot(1, x=0..1), reverse(logcosh(2)));