# Polar axes on a RegionPlot do not appear in correct location

I'm trying to plot the region where some complicated function $$f$$ is positive, within the circular region 0<R<π/2. I based my code off this answer, however the resulting polar axes do not appear at π/2, as I specified.

eps = 1
RegionPlot[ Sin[5 x] + Cos[5 y] > 0.2 && Sqrt[x^2 + y^2] < \[Pi]/2,
{x, -\[Pi]/2 - eps, \[Pi]/2 + eps}, {y, -\[Pi]/2 - eps, \[Pi]/2 +
eps},
Frame -> False,
Axes -> {False, True},
Ticks -> {False, Range[0, \[Pi]/2, \[Pi]/8]},
Epilog -> PolarPlot[{\[Pi]/4}, {\[Theta], 0, 2 \[Pi]},
PolarAxes -> True,
(*PlotRange\[Rule]\[Pi],*)
PolarAxesOrigin -> {0, \[Pi]/2}, (* does not seem to do  what it's meant to *)
PolarGridLines -> {Automatic, {0, \[Pi]/4, \[Pi]/2}},
PolarTicks -> {Drop[Table[i, {i, 0, 2 Pi, Pi/6}], -1], None},
PlotStyle -> {Black, Thin}
][[1]]]


Output:

Note that I'm deliberately not using the radial polar axis, since I can't find a simple way to make it plot in units of π.

Is this a mistake on my part, or an obscure bug?

It does look like "an obscure bug".

A work-around is to construct the polar axes/ticks primitives from scratch. The function polarAxes below creates angular and radial axes/ticks/gridlines given a radial range (radius), angular axis origin (startingangle) and specs for angular/radial ticks/gridlines (each can be specified as an integer or a list). The last two parameters control tick length and radial range padding, respectively.

ClearAll[polarAxes]
polarAxes[radius_: 1, startingangle_: Automatic, angulardivs_: Automatic,
radialgridlines_: Automatic, ticklength_: Automatic, axisoffset_: Automatic] :=
r = radius (1 + axisoffset /. Automatic -> .02),
sa = startingangle /. Automatic -> 0, tl = ticklength /. Automatic -> .05},
angularticks = Switch[angulardivs,
_Integer, CirclePoints[{r, sa}, angulardivs],
_List, r Transpose[Through@{Cos, Sin} @ Mod[angulardivs + sa, 2 π]],
_, CirclePoints[{r, sa}, 12]];
{GrayLevel[.4], AbsoluteThickness[.2],
Circle[{0, 0}, r],
Line[{#, #  (1 + tl)}] & /@ angularticks,
Line[{{0, 0}, #}] & /@ Switch[angulargridlines,
_Integer, CirclePoints[{r, sa}, angulargridlines],
_List, r Transpose[Through@{Cos, Sin}[Mod[angulargridlines + sa, 2 π]]],
_, angularticks],
Circle[{0, 0}, #] & /@ Switch[radialgridlines,
MapThread[Text[#, (1 + 3 tl/2) #2, -#2/2] &,
{Most @ Subdivide[0, 2 π, Length @ angularticks], angularticks}],
GeometricTransformation[{
MapThread[Rotate[Text[#, Offset[{0, -5}, #2 + {0, -r tl}], {0, 1}], -sa] &,
Line[{#, # + {0, -r tl}}] & /@ radialticks},
RotationTransform[sa]]}]


Examples:

eps = 1;
RegionPlot[Sin[5 x] + Cos[5 y] > 0.2 && Sqrt[x^2 + y^2] < π/2,
{x, -π/2 - eps, π/2 + eps}, {y, -π/2 - eps, π/2 + eps},
ImageSize -> 700, Frame -> False, Axes -> False,
Epilog -> {FontSize -> 12, polarAxes[π/2]}]


Use polarAxes[π/2, π/4] to make the angular axis start at π/4:

Use polarAxes[π/2, π/4, 8, Automatic, {0, π/6, π/4, π/2, π, 5 π/6, 17 π/12}, 5] to get 5 radial grid lines and angular grid lines at {0, π/6, π/4, π/2, π, 5 π/6, 17 π/12}:

Use polarAxes[π/2, π/4, {0, π/6, π/4, π/2, π, 5 π/6, 17 π/12}, 5, Automatic, 5] to get angular ticks and gridlines at specified angles and 5 radial ticks/gridlines:

Consider:

PolarTicks -> {Drop[Table[i, {i, 0, 2 Pi, Pi/6}], -1], None}


This specifies that you do not want an r-axis with radial ticks. Change "None" e.g. to "Automatic":

eps = 1
RegionPlot[
Sin[5 x] + Cos[5 y] > 0.2 &&
Sqrt[x^2 + y^2] < \[Pi]/2, {x, -\[Pi]/2 - eps, \[Pi]/2 +
eps}, {y, -\[Pi]/2 - eps, \[Pi]/2 + eps}, Frame -> False,
Axes -> {False, True}, Ticks -> {False, Range[0, \[Pi]/2, \[Pi]/8]},
Epilog ->
PolarPlot[{\[Pi]/4}, {\[Theta], 0, 2 \[Pi]},
PolarAxes -> True,(*PlotRange\[Rule]\[Pi],*)
PolarAxesOrigin -> {0, \[Pi]/2},
PolarGridLines -> {Automatic, {0, \[Pi]/4, \[Pi]/2}},
PolarTicks -> {Drop[Table[i, {i, 0, 2 Pi, Pi/6}], -1], Automatic},
PlotStyle -> {Black, Thin}][[1]]]


Or with rotated r-axis:

eps = 1
RegionPlot[
Sin[5 x] + Cos[5 y] > 0.2 &&
Sqrt[x^2 + y^2] < \[Pi]/2, {x, -\[Pi]/2 - eps, \[Pi]/2 +
eps}, {y, -\[Pi]/2 - eps, \[Pi]/2 + eps}, Frame -> False,
Axes -> {False, True}, Ticks -> {False, Range[0, \[Pi]/2, \[Pi]/8]},
Epilog ->
PolarPlot[{\[Pi]/4}, {\[Theta], 0, 2 \[Pi]},
PolarAxes -> True,(*PlotRange\[Rule]\[Pi],*)
PolarAxesOrigin -> {Pi/4, Pi/2},
PolarGridLines -> {Automatic, {0, \[Pi]/4, \[Pi]/2}},
PolarTicks -> {Drop[Table[i, {i, 0, 2 Pi, Pi/6}], -1], Automatic},
PlotStyle -> {Black, Thin}][[1]]]


• Sorry if my question was unclear, but the specific piece I was concerned about was that the radial outer circle (i.e. the theta axis) seems to have a radius larger than π/2, when I would strongly prefer it to have a radius of exactly π/2. Jun 13, 2021 at 1:51
• This seems to be a bug. Report it tp [email protected] Jun 13, 2021 at 7:35
• It's been reported, and Wolfram support have come back to me confirming that this is indeed a bug in PolarPlot. Until it's fixed in production, kglr's manual workaround was good enough for me. Jul 9, 2021 at 7:39