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.