Трехмерная воксельная диаграмма логотипа NumPy

Beginner

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

Введение

В этом практическом занятии показано, как использовать функцию Axes3D.voxels в Matplotlib для создания трехмерной воксельной диаграммы логотипа NumPy.

Советы по использованию ВМ

После запуска виртуальной машины кликните в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и получить доступ к Jupyter Notebook для практики.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импортировать библиотеки

Сначала нам нужно импортировать необходимые библиотеки, это Matplotlib и NumPy.

import matplotlib.pyplot as plt
import numpy as np

Определить функцию explode

Далее мы определяем функцию под названием explode, которая будет использоваться для увеличения размера воксельного изображения логотипа NumPy. Эта функция принимает в качестве входных данных NumPy-массив и возвращает новый NumPy-массив, размер которого в два раза больше, чем размер входного массива.

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

Построить логотип NumPy

Теперь мы можем начать строить логотип NumPy с использованием трехмерного NumPy-массива под названием n_voxels. Мы устанавливаем некоторые элементы в массиве в значение True, чтобы представить форму логотипа. Также мы определяем два других NumPy-массива под названием facecolors и edgecolors, которые будут использоваться для окрашивания вокселей.

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

Увеличить размер воксельного изображения

Теперь мы используем функцию explode, определенную ранее, для увеличения размера воксельного изображения, оставляя зазоры между каждым вокселем.

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

Сократить зазоры

Мы сокращаем зазоры между каждым вокселем, изменив координаты каждого вокселя с использованием функции indices 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

Создать воксельную диаграмму

Наконец, мы создаем трехмерную воксельную диаграмму с использованием функции voxels класса Axes3D в 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()

Резюме

В этом практическом занятии показано, как создать трехмерную воксельную диаграмму логотипа NumPy с использованием Matplotlib. Мы использовали NumPy для построения логотипа и функцию Axes3D.voxels для создания диаграммы. Также мы использовали функцию explode для увеличения размера воксельного изображения логотипа.