Animación de tramas 3D con Matplotlib

PythonPythonBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.