Polar contour plot in Mathematica?
You can use TransformedField
to get a function that can be used as the first argument of ContourPlot
:
f = (r^2 - a^3/r) Sin[t]^2;
tf = TransformedField[ "Polar" -> "Cartesian", f, {r, t} -> {x, y}]
TeXForm @ tf
$\frac{y^2 \left(x^2 \sqrt{x^2+y^2}+y^2 \sqrt{x^2+y^2}-1\right)}{\left(x^2+y^2\right)^{3/2}}$
cValues = {0.00001, 0.01, 0.05, 0.1, 0.3, 0.6, 1.0, 1.5, 2.0, 2.5, 3.2};
a = 1;
ContourPlot[tf, {x, -3, 3}, {y, -3, 3},
Contours -> cValues,
PlotPoints-> 200,
Axes -> True,
Frame -> False,
PlotRange -> All,
ContourShading -> None,
AspectRatio -> Automatic,
RegionFunction -> (Norm[{#, #2}] <= 3&)]
An alternative approach is to use f
with ContourPlot
and post-process the output to transform the lines:
cp1 = ContourPlot[f, {r, 0, 3}, {t, -Pi, Pi},
Contours -> cValues, PlotRange -> All,
ContourShading -> None, Axes -> True,
Frame -> False, ImageSize -> 300];
cp2 = Show[cp1 /. GraphicsComplex[c_, rest___] :>
GraphicsComplex[c /. {a_, b_} :> (a {Cos[b], Sin[b]}), rest],
AspectRatio -> Automatic, ImageSize -> 300];
Row[{cp, cp2}, Spacer[15]]
Here is how to do the coordinate system conversion by hand:
cValues = {0.00001, 0.01, 0.05, 0.1, 0.3, 0.6, 1.0, 1.5, 2.0, 2.5,
3.2};
ContourPlot[
(Norm[{x, y}]^2 - 3/Norm[{x, y}]) Sin[ArcTan[x, y]]^2,
{x, -3, 3},
{y, -3, 3},
Contours -> cValues
]
Using MeshFunctions
and Mesh
in a ParametricPlot
of polar coordinates to define the contours:
cValues = {0.00001, 0.01, 0.05, 0.1, 0.3, 0.6, 1.0, 1.5, 2.0, 2.5, 3.2};
Block[{a = 1},
ParametricPlot[r {Cos[\[Theta]], Sin[\[Theta]]},
{r, 0, 3 a}, {\[Theta], 0, 2 Pi},
PlotStyle -> None, BoundaryStyle -> None, PlotPoints -> {60, 120},
MeshFunctions ->
{Function[{x, y, r, \[Theta]}, (r^2 - a^3/r) Sin[\[Theta]]^2]},
Mesh -> {cValues},
MeshStyle -> {Directive[ColorData[97][1], AbsoluteThickness[1.6]]},
PlotRange -> {All, {-2, 2}}, Method -> {"BoundaryOffset" -> True}]
]