Введение
В этом практическом занятии показано, как использовать функцию 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 для увеличения размера воксельного изображения логотипа.