I want to produce the following schematic
A starting code
Clear["Global`*"];
a1 = Graphics[{Arrowheads[0.025], Arrow[{{0, 0}, {2, 0}}]}];
a2 = Graphics[{Dashed, Line[{{0, 0}, {-2, 0}}]}];
a3 = Graphics[{Arrowheads[0.025], Arrow[{{0, 0}, {0, 2}}]}];
a4 = Graphics[{Arrowheads[0.025], Arrow[{{0, 0}, {-1.5, -1}}]}];
a5 = Graphics[{Dashed, Line[{{0, 0}, {1.5, 1}}]}];
p1 = ListPlot[{{-1.1, -0.72}},
PlotStyle -> {GrayLevel[0.4], PointSize[0.045]}];
p2 = ListPlot[{{ 1.1, 0.72}},
PlotStyle -> {GrayLevel[0.4], PointSize[0.045]}];
Show[{a1, a2, a3, a4, a5, p1, p2}, ImageSize -> 550]
I can also easily insert all the text. My problem is how to insert the twisted arrow around the z axis. Any ideas?



GraphicsGraphics3DDrawingTools? – Kuba Sep 05 '16 at 09:42Tableto create the set of coordinates manually, and put them inArrow. – Szabolcs Sep 05 '16 at 09:49Graphics3D. The axes need to be done manually too if we want arrowheads, useArrow. UseDashedorDotteddirectives for those appearances. For lines,Line. For text,Text. UseBackground -> WhiteinTextto make it obscure the line behind like with $r_1$. UseSphere[]for the balls, $P_1, P_2$. The curved arrow will be a singleArrowprimitive. Use theArrowheadsdirective to control the arrow size. – Szabolcs Sep 05 '16 at 10:03Arrowinstead ofLine, and use theArrowheadsdirective to specify their size. Instead ofListPlot, usePointand thePointSizedirective. Normally one would put everything in a singleGraphicsinstead of combining multiple ones withShow. Since this is really 3D, you can considerGraphics3Dinstead. – Szabolcs Sep 05 '16 at 14:06ellipse = Graphics[Rotate[Circle[{0, 0}, {2, 1}, {135*Degree, 405*Degree}], 0*Degree]]; arrow = Graphics[{Arrowheads[Medium], Arrow[{{2*Cos[45*Degree], Sin[45*Degree]}, {2*Cos[45*Degree] - 0.12, Sin[45*Degree] + 0.07}}]}]; plot = Show[ellipse, arrow]The values of0.12and0.07are a result of trial and error; this can be made automatic using a tangent but I don't have the time now. I'll look at this again later. – corey979 Sep 05 '16 at 14:24