From fd60d922d12702de66b1f086a4140e3cf7237ac0 Mon Sep 17 00:00:00 2001 From: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com> Date: Fri, 26 Aug 2022 17:02:20 +0200 Subject: [PATCH] Backport PR #23721: 3d plot view angle documentation --- doc/_static/mplot3d_view_angles.png | Bin 0 -> 24963 bytes doc/api/toolkits/mplot3d.rst | 6 ++- doc/api/toolkits/mplot3d/view_angles.rst | 40 ++++++++++++++++ examples/mplot3d/view_planes_3d.py | 57 +++++++++++++++++++++++ 4 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 doc/_static/mplot3d_view_angles.png create mode 100644 doc/api/toolkits/mplot3d/view_angles.rst create mode 100644 examples/mplot3d/view_planes_3d.py diff --git a/doc/_static/mplot3d_view_angles.png b/doc/_static/mplot3d_view_angles.png new file mode 100644 index 0000000000000000000000000000000000000000..16d3c2f0d6994f968bd4fca3ce6de64ae4b9efe8 GIT binary patch literal 24963 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 literal 0 HcmV?d00001 diff --git a/doc/api/toolkits/mplot3d.rst b/doc/api/toolkits/mplot3d.rst index 5b3cb52571bb..19005ddd383d 100644 --- a/doc/api/toolkits/mplot3d.rst +++ b/doc/api/toolkits/mplot3d.rst @@ -20,13 +20,15 @@ more information. The interactive backends also provide the ability to rotate and zoom the 3D scene. One can rotate the 3D scene by simply clicking-and-dragging the scene. -Zooming is done by right-clicking the scene and dragging the mouse up and down -(unlike 2D plots, the toolbar zoom button is not used). +Panning is done by clicking the middle mouse button, and zooming is done by +right-clicking the scene and dragging the mouse up and down. Unlike 2D plots, +the toolbar pan and zoom buttons are not used. .. toctree:: :maxdepth: 2 mplot3d/faq.rst + mplot3d/view_angles.rst .. note:: `.pyplot` cannot be used to add content to 3D plots, because its function diff --git a/doc/api/toolkits/mplot3d/view_angles.rst b/doc/api/toolkits/mplot3d/view_angles.rst new file mode 100644 index 000000000000..10d4fac39e8c --- /dev/null +++ b/doc/api/toolkits/mplot3d/view_angles.rst @@ -0,0 +1,40 @@ +.. _toolkit_mplot3d-view-angles: + +******************* +mplot3d View Angles +******************* + +How to define the view angle +============================ + +The position of the viewport "camera" in a 3D plot is defined by three angles: +*elevation*, *azimuth*, and *roll*. From the resulting position, it always +points towards the center of the plot box volume. The angle direction is a +common convention, and is shared with +`PyVista `_ and +`MATLAB `_ +(though MATLAB lacks a roll angle). Note that a positive roll angle rotates the +viewing plane clockwise, so the 3d axes will appear to rotate +counter-clockwise. + +.. image:: /_static/mplot3d_view_angles.png + :align: center + :scale: 50 + +Rotating the plot using the mouse will control only the azimuth and elevation, +but all three angles can be set programmatically:: + + import matplotlib.pyplot as plt + ax = plt.figure().add_subplot(projection='3d') + ax.view_init(elev=30, azim=45, roll=15) + + +Primary view planes +=================== + +To look directly at the primary view planes, the required elevation, azimuth, +and roll angles are shown in the diagram of an "unfolded" plot below. These are +further documented in the `.mplot3d.axes3d.Axes3D.view_init` API. + +.. plot:: gallery/mplot3d/view_planes_3d.py + :align: center diff --git a/examples/mplot3d/view_planes_3d.py b/examples/mplot3d/view_planes_3d.py new file mode 100644 index 000000000000..c4322d60fe93 --- /dev/null +++ b/examples/mplot3d/view_planes_3d.py @@ -0,0 +1,57 @@ +""" +====================== +Primary 3D view planes +====================== + +This example generates an "unfolded" 3D plot that shows each of the primary 3D +view planes. The elevation, azimuth, and roll angles required for each view are +labeled. You could print out this image and fold it into a box where each plane +forms a side of the box. +""" + +import matplotlib.pyplot as plt + + +def annotate_axes(ax, text, fontsize=18): + ax.text(x=0.5, y=0.5, z=0.5, s=text, + va="center", ha="center", fontsize=fontsize, color="black") + +# (plane, (elev, azim, roll)) +views = [('XY', (90, -90, 0)), + ('XZ', (0, -90, 0)), + ('YZ', (0, 0, 0)), + ('-XY', (-90, 90, 0)), + ('-XZ', (0, 90, 0)), + ('-YZ', (0, 180, 0))] + +layout = [['XY', '.', 'L', '.'], + ['XZ', 'YZ', '-XZ', '-YZ'], + ['.', '.', '-XY', '.']] +fig, axd = plt.subplot_mosaic(layout, subplot_kw={'projection': '3d'}, + figsize=(12, 8.5)) +for plane, angles in views: + axd[plane].set_xlabel('x') + axd[plane].set_ylabel('y') + axd[plane].set_zlabel('z') + axd[plane].set_proj_type('ortho') + axd[plane].view_init(elev=angles[0], azim=angles[1], roll=angles[2]) + axd[plane].set_box_aspect(None, zoom=1.25) + + label = f'{plane}\n{angles}' + annotate_axes(axd[plane], label, fontsize=14) + +for plane in ('XY', '-XY'): + axd[plane].set_zticklabels([]) + axd[plane].set_zlabel('') +for plane in ('XZ', '-XZ'): + axd[plane].set_yticklabels([]) + axd[plane].set_ylabel('') +for plane in ('YZ', '-YZ'): + axd[plane].set_xticklabels([]) + axd[plane].set_xlabel('') + +label = 'mplot3d primary view planes\n' + 'ax.view_init(elev, azim, roll)' +annotate_axes(axd['L'], label, fontsize=18) +axd['L'].set_axis_off() + +plt.show()