 # [Matplotlib-users] Arc and art3d.pathpatch_2d_to_3d

Hi,

I'm trying to plot an arc in a 3d plot using patches.Arc and
art3d.pathpatch_2d_to_3d. However, although the arc is correctly shown
from theta1 to theta2 in a 2d plot, the 3d plot always shows the full
circle. Here is a minimal example:

from matplotlib import pyplot as plt
from matplotlib import patches
from mpl_toolkits.mplot3d import art3d

fig = plt.figure()
p = patches.Arc((0, 0), 0.5, 0.5, angle=0., theta1=0., theta2=45.)
art3d.pathpatch_2d_to_3d(p, z=0, zdir="y")
plt.show()

I get a whole circle but want to have an arc only from 0 degrees to 45
degrees. A corresponding 2d plot shows the arc correctly:

fig = plt.figure()
p = patches.Arc((0, 0), 0.5, 0.5, angle=0., theta1=0., theta2=45.)
plt.show()

What am I doing wrong with the conversion from 2d to 3d?

I tried Python 3.7.3 with Matplotlib 3.0.2 and Python 2.7.16 with
Matplotlib 2.2.3 (which are shipped with my Linux distribution).

Andreas

···

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

This is because `Arc` has a lot of logic in it’s `draw` method to make sure that the arcs draw correctly and efficiently even if you are zoomed in an a small section, but uses the `Ellipse` patch as it’s base (to manage the major/minor axis, location, etc). `Ellipse` works by setting some internal state and then using the draw method from `Patch`.

What `art3d.pathpatch_2d_to_3d` does under the hood is change what `__class__` the object thinks it is (!!) and tells your Arc it is now a `Patch3D` and uses the state for the base Path state to draw its self, which due to inheriting from Ellipse is the full ellipse.

Having said that, I don’t have a good idea of how to fix this. I think the minimal solution is to adjust the path in `Arc` to clip it self to the given range (so the up-convert to Path3D works) and to make sure that the path re-sampling logic in the 2D draw still works on the pre-clipped path.

Tom

···

Thomas Caswell
tcaswell@gmail.com