Основные трехмерные плоскости обзора

Beginner

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

Введение

В этом уроке мы научимся генерировать "раскрытую" трехмерную диаграмму с использованием Matplotlib, которая показывает каждую из основных трехмерных плоскостей обзора. Также мы присвоим метки углам наклона, азимута и крена, необходимым для каждого вида обзора. Это изображение можно распечатать и свернуть в коробку, где каждая плоскость образует одну из сторон коробки.

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

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

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

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

Импортируем необходимые библиотеки

Начнем с импорта необходимых библиотек для этого урока, в том числе Matplotlib.

import matplotlib.pyplot as plt

Определяем функцию для аннотации осей

Определяем функцию annotate_axes, которую мы будем использовать позже для присвоения меток каждому из основных трехмерных плоскостей обзора с соответствующими углами.

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

Определяем основные трехмерные плоскости обзора и их углы

Определяем основные трехмерные плоскости обзора и соответствующие углы наклона, азимута и крена.

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

Определяем макет трехмерной диаграммы

Определяем макет трехмерной диаграммы с использованием списка списков. Точка '.' в списке представляет собой пустой подграфик.

layout = [['XY',  '.',   'L',   '.'],
          ['XZ', 'YZ', '-XZ', '-YZ'],
          ['.',   '.', '-XY',   '.']]

Создаем трехмерную диаграмму

Мы используем subplot_mosaic для создания трехмерной диаграммы на основе макета, определенного на шаге 4.

fig, axd = plt.subplot_mosaic(layout, subplot_kw={'projection': '3d'},
                              figsize=(12, 8.5))

Задаем свойства каждой основной трехмерной плоскости обзора

Мы задаем свойства каждой основной трехмерной плоскости обзора, включая метки для осей x, y и z, тип проекции и углы обзора.

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)

Пишем подписи к каждой основной трехмерной плоскости обзора

Мы используем функцию annotate_axes, определенную на шаге 2, чтобы подписать каждую основную трехмерную плоскость обзора своими соответствующими углами.

for plane, angles in views:
    label = f'{plane}\n{angles}'
    annotate_axes(axd[plane], label, fontsize=14)

Настраиваем метки делений и метки осей для каждой основной трехмерной плоскости обзора

Мы настраиваем метки делений и метки осей для каждой основной трехмерной плоскости обзора, чтобы убрать любые лишние метки.

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

Добавляем подпись к центральному подграфику

Мы добавляем подпись к центральному подграфику, чтобы показать, что это график основных трехмерных плоскостей обзора.

label ='mplot3d primary view planes\n' + 'ax.view_init(elev, azim, roll)'
annotate_axes(axd['L'], label, fontsize=18)
axd['L'].set_axis_off()

Отображаем трехмерный график

Мы отображаем трехмерный график с использованием plt.show().

plt.show()

Резюме

В этом уроке мы узнали, как с помощью Matplotlib генерировать "развёрнутый" трехмерный график, показывающий каждую из основных трехмерных плоскостей обзора. Мы также подписали углы наклона, азимута и крена, необходимые для каждого вида, и настроили метки делений и метки осей для каждой основной трехмерной плоскости обзора. Это изображение можно распечатать и свернуть в коробку, где каждая плоскость образует одну из сторон коробки.