Создание трехмерных воксельных графиков в Matplotlib

PythonPythonBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Советы по работе с ВМ

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

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

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

Импорт библиотек

Первым шагом является импорт необходимых библиотек для этого практического занятия. Мы будем использовать matplotlib.pyplot, numpy и matplotlib.colors.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors

Определение функции для нахождения серединных точек

Далее мы определяем функцию midpoints, которая вычисляет серединные точки массива координат. Эта функция будет использоваться позже для вычисления серединных точек r, theta и z.

def midpoints(x):
    sl = ()
    for i in range(x.ndim):
        x = (x[sl + np.index_exp[:-1]] + x[sl + np.index_exp[1:]]) / 2.0
        sl += np.index_exp[:]
    return x

Определение координат и значений RGB

В этом шаге мы определяем координаты r, theta и z и приписываем каждому из них значения RGB.

r, theta, z = np.mgrid[0:1:11j, 0:np.pi*2:25j, -0.5:0.5:11j]
x = r*np.cos(theta)
y = r*np.sin(theta)

rc, thetac, zc = midpoints(r), midpoints(theta), midpoints(z)

## определяем вращательный тороид вокруг [0.7, *, 0]
sphere = (rc - 0.7)**2 + (zc + 0.2*np.cos(thetac*2))**2 < 0.2**2

## объединяем компоненты цвета
hsv = np.zeros(sphere.shape + (3,))
hsv[..., 0] = thetac / (np.pi*2)
hsv[..., 1] = rc
hsv[..., 2] = zc + 0.5
colors = matplotlib.colors.hsv_to_rgb(hsv)

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

Теперь мы создаем трехмерный воксельный график с использованием функции ax.voxels. Мы передаем x, y, z и sphere в качестве параметров. Также добавляем facecolors и edgecolors с использованием массива colors, который мы определили ранее.

ax = plt.figure().add_subplot(projection='3d')
ax.voxels(x, y, z, sphere,
          facecolors=colors,
          edgecolors=np.clip(2*colors - 0.5, 0, 1),  ## brighter
          linewidth=0.5)

Отображение графика

Наконец, мы отображаем график с использованием функции plt.show().

plt.show()

Резюме

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