Gráfico de Voxel 3D do Logotipo NumPy

Beginner

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

Introdução

Este laboratório demonstra como usar a função Axes3D.voxels em Matplotlib para criar um gráfico de voxel 3D do logotipo do NumPy.

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 bibliotecas

Primeiramente, precisamos importar as bibliotecas necessárias, que são Matplotlib e NumPy.

import matplotlib.pyplot as plt
import numpy as np

Definir a função explode

Em seguida, definimos uma função chamada explode que será usada para aumentar a escala da imagem de voxel do logotipo do NumPy. Esta função recebe um array NumPy como entrada e retorna um novo array NumPy que é o dobro do tamanho do array de entrada.

def explode(data):
    size = np.array(data.shape)*2
    data_e = np.zeros(size - 1, dtype=data.dtype)
    data_e[::2, ::2, ::2] = data
    return data_e

Construir o logotipo do NumPy

Agora podemos começar a construir o logotipo do NumPy usando um array NumPy 3D chamado n_voxels. Definimos certos elementos no array como True para representar a forma do logotipo. Também definimos dois outros arrays NumPy chamados facecolors e edgecolors que serão usados para colorir os voxels.

n_voxels = np.zeros((4, 3, 4), dtype=bool)
n_voxels[0, 0, :] = True
n_voxels[-1, 0, :] = True
n_voxels[1, 0, 2] = True
n_voxels[2, 0, 1] = True

facecolors = np.where(n_voxels, '#FFD65DC0', '#7A88CCC0')
edgecolors = np.where(n_voxels, '#BFAB6E', '#7D84A6')

Aumentar a escala da imagem de voxel

Agora usamos a função explode definida anteriormente para aumentar a escala da imagem de voxel, deixando lacunas entre cada voxel.

filled = np.ones(n_voxels.shape)
filled_2 = explode(filled)
fcolors_2 = explode(facecolors)
ecolors_2 = explode(edgecolors)

Reduzir as lacunas

Reduzimos as lacunas entre cada voxel modificando as coordenadas de cada voxel usando a função indices do NumPy.

x, y, z = np.indices(np.array(filled_2.shape) + 1).astype(float) // 2
x[0::2, :, :] += 0.05
y[:, 0::2, :] += 0.05
z[:, :, 0::2] += 0.05
x[1::2, :, :] += 0.95
y[:, 1::2, :] += 0.95
z[:, :, 1::2] += 0.95

Criar o gráfico de voxel

Finalmente, criamos o gráfico de voxel 3D usando a função voxels da classe Axes3D em Matplotlib.

ax = plt.figure().add_subplot(projection='3d')
ax.voxels(x, y, z, filled_2, facecolors=fcolors_2, edgecolors=ecolors_2)
ax.set_aspect('equal')

plt.show()

Resumo

Este laboratório demonstrou como criar um gráfico de voxel 3D do logotipo do NumPy usando Matplotlib. Usamos NumPy para construir o logotipo e a função Axes3D.voxels para criar o gráfico. Também usamos uma função chamada explode para aumentar a escala da imagem de voxel do logotipo.