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