Introducción
Esta práctica te guiará sobre cómo crear una animación simple de una trama 3D en rotación sobre los tres ejes utilizando Matplotlib. Utilizaremos un conjunto de datos de muestra para crear un wireframe básico, establecer etiquetas de eje y rotar los ejes.
Consejos sobre la VM
Una vez finalizada la inicialización de la VM, haz clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tengas que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tienes problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona retroalimentación después de la sesión y resolveremos el problema para ti de inmediato.
Importar bibliotecas y conjunto de datos
En primer lugar, necesitamos importar las bibliotecas y el conjunto de datos necesarios. En este ejemplo, usaremos las bibliotecas matplotlib y mpl_toolkits.mplot3d para crear la trama 3D, y la función axes3d.get_test_data() para generar un conjunto de datos de muestra.
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
## Generate sample dataset
X, Y, Z = axes3d.get_test_data(0.05)
Crear una trama 3D
A continuación, crearemos una trama 3D utilizando las funciones plt.figure() y fig.add_subplot(). También usaremos la función ax.plot_wireframe() para representar el conjunto de datos como un wireframe.
## Create 3D plot
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
## Plot wireframe
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
Establecer etiquetas de eje
Ahora estableceremos las etiquetas de eje para la trama 3D utilizando las funciones ax.set_xlabel(), ax.set_ylabel() y ax.set_zlabel().
## Set axis labels
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
Rotar los ejes y actualizar la trama
Finalmente, rotaremos los ejes y actualizaremos la trama utilizando un bucle for que recorre una rotación completa de elevación, luego azimuth, roll y todas. Usaremos la función ax.view_init() para actualizar la vista del eje y el título, y las funciones plt.title(), plt.draw() y plt.pause() para mostrar la animación.
## Rotate the axes and update the plot
for angle in range(0, 360*4 + 1):
## Normalize the angle to the range [-180, 180] for display
angle_norm = (angle + 180) % 360 - 180
## Cycle through a full rotation of elevation, then azimuth, roll, and all
elev = azim = roll = 0
if angle <= 360:
elev = angle_norm
elif angle <= 360*2:
azim = angle_norm
elif angle <= 360*3:
roll = angle_norm
else:
elev = azim = roll = angle_norm
## Update the axis view and title
ax.view_init(elev, azim, roll)
plt.title('Elevation: %d°, Azimuth: %d°, Roll: %d°' % (elev, azim, roll))
## Display animation
plt.draw()
plt.pause(.001)
Resumen
En este laboratorio, aprendimos cómo crear una animación simple de una trama 3D en rotación sobre los tres ejes utilizando Matplotlib. Utilizamos un conjunto de datos de muestra para crear un wireframe básico, establecimos etiquetas de eje y rotamos los ejes. También aprendimos cómo utilizar las funciones ax.view_init(), plt.title(), plt.draw() y plt.pause() para actualizar la trama y mostrar la animación.