Mayavi为所有场景修复了颜色条

问题描述 投票:2回答:2

我正在寻找一种方法来保持colorbar(和场景中的颜色)不变,无论我显示的数据如何(例如,假设我想要从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)
python volume colorbar mayavi colormap
2个回答
1
投票

您需要修复lut的数据范围

# get the current lut manager
lut_manager = mlab.colorbar(orientation='vertical')
# fix the range
lut_manager.data_range = (0, 10)

这样,刻度将始终从0到10,如果您没有所有范围内的值(颜色可能非常相似),通常这可能会有问题


0
投票

使用the recording feature,你可以看到你可以通过修改scalar look-up-table manager来控制它:

#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,我保留在代码中,但如果你记录你的行为,你可能会得到不同的值。

© www.soinside.com 2019 - 2024. All rights reserved.