{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n# Rotating a 3D plot\n\nA very simple animation of a rotating 3D plot about all three axes.\n\nSee :doc:`wire3d_animation_sgskip` for another example of animating a 3D plot.\n\n(This example is skipped when building the documentation gallery because it\nintentionally takes a long time to run)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n\nfrom mpl_toolkits.mplot3d import axes3d\n\nfig = plt.figure()\nax = fig.add_subplot(projection='3d')\n\n# Grab some example data and plot a basic wireframe.\nX, Y, Z = axes3d.get_test_data(0.05)\nax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)\n\n# Set the axis labels\nax.set_xlabel('x')\nax.set_ylabel('y')\nax.set_zlabel('z')\n\n# Rotate the axes and update\nfor angle in range(0, 360*4 + 1):\n # Normalize the angle to the range [-180, 180] for display\n angle_norm = (angle + 180) % 360 - 180\n\n # Cycle through a full rotation of elevation, then azimuth, roll, and all\n elev = azim = roll = 0\n if angle <= 360:\n elev = angle_norm\n elif angle <= 360*2:\n azim = angle_norm\n elif angle <= 360*3:\n roll = angle_norm\n else:\n elev = azim = roll = angle_norm\n\n # Update the axis view and title\n ax.view_init(elev, azim, roll)\n plt.title('Elevation: %d\u00b0, Azimuth: %d\u00b0, Roll: %d\u00b0' % (elev, azim, roll))\n\n plt.draw()\n plt.pause(.001)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ ".. tags::\n plot-type: 3D,\n component: animation,\n level: advanced,\n internal: high-bandwidth\n\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.2" } }, "nbformat": 4, "nbformat_minor": 0 }