我正在寻找一种方法来保持颜色条(和场景中的颜色(不变,无论我显示的数据如何(例如,假设我想有从 0 到 10 的颜色,使用当前设置mayavi 将根据数据调整颜色,因此第一个图将从 0 到 1,第二个 0 到 2 等(。规范化(vmin,vmax(不是选项,因为它们只是规范化数据。
#Minimum working example
from numpy import sin, cos, mgrid, pi, sqrt
from mayavi import mlab
mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))
u, v = mgrid[- 0.035:pi:0.01, - 0.035:pi:0.01]
X = 2 / 3. * (cos(u) * cos(2 * v)
+ sqrt(2) * sin(u) * cos(v)) * cos(u) / (sqrt(2) -
sin(2 * u) * sin(3 * v))
Y = 2 / 3. * (cos(u) * sin(2 * v) -
sqrt(2) * sin(u) * sin(v)) * cos(u) / (sqrt(2)
- sin(2 * u) * sin(3 * v))
Z = -sqrt(2) * cos(u) * cos(u) / (sqrt(2) - sin(2 * u) * sin(3 * v))
for i in range(1,10):
S = sin(u)*i
mlab.mesh(X, Y, Z, scalars=S, colormap='YlGnBu', )
mlab.view(.0, - 5.0, 4)
mlab.colorbar(orientation='vertical')
mlab.show()
mlab.close(all=True)
您需要修复LUT的数据范围
# get the current lut manager
lut_manager = mlab.colorbar(orientation='vertical')
# fix the range
lut_manager.data_range = (0, 10)
这样,比例将始终从零到十,通常如果您没有所有范围内的值(颜色可能非常相似(,这可能会有问题
使用录制功能,您可以看到可以通过修改标量查找表管理器来控制它:
#Minimum working example
from numpy import array, sin, cos, mgrid, pi, sqrt
from mayavi import mlab
mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))
u, v = mgrid[- 0.035:pi:0.01, - 0.035:pi:0.01]
X = 2 / 3. * (cos(u) * cos(2 * v)
+ sqrt(2) * sin(u) * cos(v)) * cos(u) / (sqrt(2) -
sin(2 * u) * sin(3 * v))
Y = 2 / 3. * (cos(u) * sin(2 * v) -
sqrt(2) * sin(u) * sin(v)) * cos(u) / (sqrt(2)
- sin(2 * u) * sin(3 * v))
Z = -sqrt(2) * cos(u) * cos(u) / (sqrt(2) - sin(2 * u) * sin(3 * v))
for i in range(1,10):
S = sin(u)*i
_m = mlab.mesh(X, Y, Z, scalars=S, colormap='YlGnBu', )
mlab.view(.0, - 5.0, 4)
mlab.colorbar(orientation='vertical')
_m.module_manager.scalar_lut_manager.use_default_range = False
_m.module_manager.scalar_lut_manager.data_range = array([-1., 10.])
_m.module_manager.scalar_lut_manager.scalar_bar.position = array([ 0.01, 0.15])
_m.module_manager.scalar_lut_manager.scalar_bar.position2 = array([ 0.1, 0.8])
mlab.show()
mlab.close(all=True)
似乎设置scalar_bar.position
重置我保存在代码中的 LUT,但如果您记录您的操作,您可能会想出不同的值。