作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我似乎无法让图例出现在 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
是 [0.0, 1.0]
范围内的 RGB
值数组。该示例使用 Tableau 20 color palette映射到 [0.0, 1.0]
空间。这会生成以下输出
关于python - 如何向 mayavi 图中添加图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59750071/
我是一名优秀的程序员,十分优秀!