Как я могу добавить легенду к сюжету майяви - PullRequest
1 голос
/ 15 января 2020

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

import matplotlib.pyplot as plt
plt.plot(x, y, z, label="my-label")

Я не нашел рабочих примеров таких легенд в mayavi.

1 Ответ

1 голос
/ 27 января 2020

Поскольку в Mayavi нет встроенного метода для создания легенд, самый простой способ сделать это - создать свою фигуру Мавави, а затем прочитать ее в matplotlib и создать легенду. Это требует, чтобы у вас был программный c доступ к значениям цвета, используемым при создании графика майяви - гораздо проще, когда вы явно указываете цвета, а не позволяете циклическому цвету автоматически назначать цвета.

Вот пример, который создает фигуру майави и затем передает ее в matplotlib, чтобы затем создать легенду.

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import mayavi.mlab as mlab
from mayavi.api import OffScreenEngine
import numpy as np

mlab.options.offscreen = True
e = OffScreenEngine()
e.start()
fig = mlab.figure(engine=e, size=(5000,5000), fgcolor=(0,0,0), bgcolor=(1,1,1))
mlab.view(azimuth=45, elevation=0)

n = 500
d = np.linspace(0, np.pi*8, n)

mlab.plot3d(d, np.cos(d**1.2), np.cos(d), color = colors[0])
mlab.plot3d(d, np.sin(d), np.sin(d), color = colors[1])
mlab.plot3d(d, np.sin(d)*np.cos(d), np.cos(d), color = colors[2])
mlab.plot3d(d, np.sin(d)**2, np.sin(d)**2, color = colors[3])

mlab.savefig("./example.png")

im = plt.imread("./example.png")
labels = ["One", "Two", "Three", "Four"]

elements = [Line2D([0], [0], label = l, color = c) for l, c in zip(labels, colors[:4])]
plt.imshow(im)
plt.legend(handles = elements)
plt.gca().set_axis_off()
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, 
            hspace = 0, wspace = 0)
plt.margins(0,0)
plt.savefig("./example.png")

colors - это массив RGB значений в диапазоне [0.0, 1.0]. В примере используется цветовая палитра Tableau , сопоставленная с пространством [0.0, 1.0]. Это генерирует следующий вывод

enter image description here

...