【问题标题】:Mayavi fixed colorbar for all scenesMayavi 修复了所有场景的颜色条
【发布时间】:2019-02-06 10:32:28
【问题描述】:

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


    【解决方案1】:

    使用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,但如果您记录您的操作,您可能会得出不同的值。

    【讨论】:

      【解决方案2】:

      您需要修复 lut 的数据范围

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

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

      【讨论】:

        猜你喜欢
        • 2022-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-22
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多