Animação de Gráfico 3D com Matplotlib

Beginner

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

Introdução

Este laboratório irá guiá-lo sobre como criar uma animação simples de um gráfico 3D rotativo em torno dos três eixos usando Matplotlib. Usaremos um conjunto de dados de exemplo para criar um wireframe básico, definir rótulos de eixos e rotacionar os eixos.

Dicas da VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Importar Bibliotecas e Conjunto de Dados

Primeiramente, precisamos importar as bibliotecas e o conjunto de dados necessários. Neste exemplo, usaremos as bibliotecas matplotlib e mpl_toolkits.mplot3d para criar o gráfico 3D, e a função axes3d.get_test_data() para gerar um conjunto de dados de exemplo.

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

## Generate sample dataset
X, Y, Z = axes3d.get_test_data(0.05)

Criar um Gráfico 3D

Em seguida, criaremos um gráfico 3D usando as funções plt.figure() e fig.add_subplot(). Também usaremos a função ax.plot_wireframe() para plotar o conjunto de dados como um 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)

Definir Rótulos dos Eixos

Agora, definiremos os rótulos dos eixos para o gráfico 3D usando as funções ax.set_xlabel(), ax.set_ylabel() e ax.set_zlabel().

## Set axis labels
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

Rotacionar os Eixos e Atualizar o Gráfico

Finalmente, rotacionaremos os eixos e atualizaremos o gráfico usando um loop for que percorre uma rotação completa de elevação (elevation), depois azimute (azimuth), rotação (roll) e todos. Usaremos a função ax.view_init() para atualizar a visualização e o título do eixo, e as funções plt.title(), plt.draw() e plt.pause() para exibir a animação.

## 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)

Resumo

Neste laboratório, aprendemos como criar uma animação simples de um gráfico 3D rotativo em torno dos três eixos usando Matplotlib. Usamos um conjunto de dados de amostra para criar um wireframe básico, definir rótulos de eixos e rotacionar os eixos. Também aprendemos como usar as funções ax.view_init(), plt.title(), plt.draw() e plt.pause() para atualizar o gráfico e exibir a animação.