我似乎无法使图例出现在mayavi图中。我已经创建了一个简单的3d图,但是我需要为图提供一个图例。 Matplotlib支持添加方式:
import matplotlib.pyplot as plt
plt.plot(x, y, z, label="my-label")
我在mayavi中没有找到这样的传说的可行示例。
由于mayavi没有用于创建图例的内置方法,最简单的方法是创建您的mavavi图形,然后将其读入matplotlib并创建一个图例。这要求您可以通过编程方式访问在创建mayavi图中使用的颜色值-当您显式指定颜色而不是让颜色循环仪自动分配颜色时,这要容易得多。
这里是创建mayavi人物,然后将其传递给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 20 color palette空间的[0.0, 1.0]
。生成以下输出