На этом шаге мы приведем несколько примеров такого управления.
Рассмотрим на примерах работу с сценой. Для начала импортируем нужные пакеты:
import numpy as np from mayavi import mlab import matplotlib.pyplot as pl
Создадим массив, содержащий координаты уже знакомой нам 3D-спирали:
t = np.linspace(-5, 5, 100) x = 3 * np.cos(t) y = 3 * np.sin(t) z = t / np.pi
Настроим для новой сцены светло-зеленый задний фон (параметр bgcolor), красный цвет для текстовых надписей (параметр fgcolor) и размер 300x300:
mlab.figure("test_fig", bgcolor=(0.56, 0.93, 0.56),
fgcolor=(1, 0, 0), size=(300, 300))
Построим 3D-спираль и отобразим сцену:
s = mlab.plot3d(x, y, z, z, tube_radius=0.1)
mlab.title("Test Fig")
mlab.show()
Вот полный текст приложения:
import numpy as np from mayavi import mlab import matplotlib.pyplot as pl t = np.linspace(-5, 5, 100) x = 3 * np.cos(t) y = 3 * np.sin(t) z = t / np.pi mlab.figure("test_fig", bgcolor=(0.56, 0.93, 0.56), fgcolor=(1, 0, 0), size=(300, 300)) s = mlab.plot3d(x, y, z, z, tube_radius=0.1) mlab.title("Test Fig") mlab.show()
В результате получим сцену следующего вида:
Рис.1. Демонстрация возможностей Mayavi для настройки сцены
Если вы хотите сохранить сцену как изображение, то нужно добавить перед функцией mlab.show() либо вместо неё, если не хотите, чтобы сцена отображалась на экране, строку:
mlab.savefig("test.png")
Содержимое сцены можно получить как изображение в виде массива для дальнейшей обработки. Удалите или закомментируйте строку:
mlab.show()
f = mlab.gcf() f.scene._lift() img = mlab.screenshot() plt.imshow(img) plt.show()
Первые две строки нужны для того, чтобы функция screenshot() нормально работала. В Mayavi есть ошибка, которая не позволяет без них получать скриншот. Для визуализации изображения используется функция imshow() из библиотеки Matplotlib. В результате получим окно, представленное на рисунке 2.
Рис.2. Модель в виде изображения
Вот полный текст приложения:
import numpy as np from mayavi import mlab import matplotlib.pyplot as plt t = np.linspace(-5, 5, 100) x = 3 * np.cos(t) y = 3 * np.sin(t) z = t / np.pi mlab.figure("test_fig", bgcolor=(0.56, 0.93, 0.56), fgcolor=(1, 0, 0), size=(300, 300)) s = mlab.plot3d(x, y, z, z, tube_radius=0.1) mlab.title("Test Fig") # mlab.show() f = mlab.gcf() f.scene._lift() img = mlab.screenshot() plt.imshow(img) plt.show()
На следующем шаге мы рассмотрим настройку элементов оформления.