You could use Epilog
to put the labels there manually:
ParametricPlot[{Sin[t], Cos[t]}, {t, 0, 2 \[Pi]}, Frame -> True,
AxesStyle -> Arrowheads[0.04], PlotRangePadding -> 0.2,
Epilog -> {Inset["x", Scaled[{0.95, 0.48}]], Inset["y", Scaled[{0.48, 0.95}]]}]
I used Scaled
so it doesn't matter how large the circle is (and works well with PlotRangePadding
).
Asymmetrical Version - not yet profoundly tested
Based on Mr. Wizards comments, I thought about asymmetrical ideas. He showed how to "abuse" the arrowheads - I'll try something different here (note that the code can be optimized, but I keep it rather extensive to show what I was thinking):
What I do: I get the PlotRange
, AxesOrigin
and PlotRangePadding
and calculate the position:
doPP[pp_] :=
Module[{plotRange, plotRangePadding, axes, offset},
plotRange = Extract[pp, Most /@ Position[pp, PlotRange]][[1, 2]];
plotRangePadding = {-Abs@#, Abs@#} &@
Extract[pp, Most /@ Position[pp, PlotRangePadding]][[1, 2]];
axes = Reverse@Extract[pp, Most /@ Position[pp, AxesOrigin]][[1, 2]];
offset =
Rescale[#1, #2] & @@@ Transpose[{axes, plotRangePadding + # & /@ plotRange}];
Show[pp,
Epilog -> {Inset["x", Scaled[{ 0.95, offset[[1]] - 0.02}]],
Inset["y", Scaled[{offset[[2]] - 0.02, 0.95}]]}]]
where you can customize 0.02
and 0.95
to your liking (or set as options, parameters).
We can execute now:
ParametricPlot[{Sin[t], Cos[t]}, {t, 0, 2 \[Pi]}, Frame -> True,
AxesStyle -> Arrowheads[0.04], PlotRangePadding -> 0.2,
AxesOrigin -> {0.3, 0.5}, PlotRange -> {-0.2, 1.3}] // doPP