首页 > 解决方案 > Mayavi 修复了所有场景的颜色条

问题描述

我正在寻找一种方法来保持颜色条(和场景上的颜色)不变,而不管我显示的数据是什么(例如,假设我想要颜色从 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)

标签: pythonvolumecolorbarmayavicolormap

解决方案


您需要修复 lut 的数据范围

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

这样,比例将始终从零到十,如果您没有在所有范围内都有值,通常这可能会出现问题(颜色可能非常相似)


推荐阅读