Шаг 155.
Язык Python. Визуализация данных. Библиотека Mayavi. Настройка представления. Управление Фигурой/Сценой (окончание)

    На этом шаге мы приведем несколько примеров такого управления.

    Рассмотрим на примерах работу с сценой. Для начала импортируем нужные пакеты:

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()
Архив с файлом можно взять здесь.

    На следующем шаге мы рассмотрим настройку элементов оформления.




Предыдущий шаг Содержание Следующий шаг