Planos de Visualização 3D Primários

Beginner

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

Introdução

Neste tutorial, aprenderemos como gerar um gráfico 3D "desdobrado" usando Matplotlib que mostra cada um dos planos de visualização 3D principais. Também rotularemos os ângulos de elevação, azimute e rotação (roll) necessários para cada visualização. Esta imagem pode ser impressa e dobrada em uma caixa, onde cada plano forma um lado da caixa.

Dicas para a 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 as bibliotecas necessárias

Começamos importando as bibliotecas necessárias para este tutorial, que inclui Matplotlib.

import matplotlib.pyplot as plt

Definir uma função para anotar os eixos

Definimos uma função annotate_axes que usaremos mais tarde para rotular cada um dos planos de visualização 3D principais com seus respectivos ângulos.

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

Definir os planos de visualização 3D primários e seus ângulos

Definimos os planos de visualização 3D primários e seus ângulos de elevação, azimute e rotação correspondentes.

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

Definir o layout do gráfico 3D

Definimos o layout do gráfico 3D usando uma lista de listas. O '.' na lista representa um subplot vazio.

layout = [['XY',  '.',   'L',   '.'],
          ['XZ', 'YZ', '-XZ', '-YZ'],
          ['.',   '.', '-XY',   '.']]

Criar o gráfico 3D

Usamos subplot_mosaic para criar o gráfico 3D com base no layout definido no passo 4.

fig, axd = plt.subplot_mosaic(layout, subplot_kw={'projection': '3d'},
                              figsize=(12, 8.5))

Definir as propriedades de cada plano de visualização 3D primário

Definimos as propriedades de cada plano de visualização 3D primário, incluindo os rótulos para os eixos x, y e z, o tipo de projeção e os ângulos de visualização.

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)

Rotular cada plano de visualização 3D primário

Usamos a função annotate_axes definida no passo 2 para rotular cada plano de visualização 3D primário com seus respectivos ângulos.

for plane, angles in views:
    label = f'{plane}\n{angles}'
    annotate_axes(axd[plane], label, fontsize=14)

Personalizar os rótulos dos ticks e dos eixos para cada plano de visualização 3D primário

Personalizamos os rótulos dos ticks e dos eixos para cada plano de visualização 3D primário para remover quaisquer rótulos desnecessários.

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('')

Adicionar um rótulo ao subplot central

Adicionamos um rótulo ao subplot central para indicar que este é um gráfico de planos de visualização 3D primários.

label = 'mplot3d primary view planes\n' + 'ax.view_init(elev, azim, roll)'
annotate_axes(axd['L'], label, fontsize=18)
axd['L'].set_axis_off()

Exibir o gráfico 3D

Exibimos o gráfico 3D usando plt.show().

plt.show()

Resumo

Neste tutorial, aprendemos como gerar um gráfico 3D "desdobrado" que mostra cada um dos planos de visualização 3D primários usando Matplotlib. Também rotulamos os ângulos de elevação, azimute e rotação (roll) necessários para cada visualização e personalizamos os rótulos de marcação (tick labels) e os rótulos dos eixos (axis labels) para cada plano de visualização 3D primário. Esta imagem pode ser impressa e dobrada em uma caixa, onde cada plano forma um lado da caixa.