我需要在 Python 中可视化几个重叠的标量场。我发现mayavi
图书馆做这种情节。问题是我不明白如何为标量字段自定义颜色图。我的想法是为每个字段设置一种颜色的阴影。我尝试采用一个例子 http://docs.enthought.com/mayavi/mayavi/auto/example_custom_colormap.html#example-custom-colormap,但它不起作用。这是我使用红色阴影可视化标量场的代码:
import numpy as np
from mayavi import mlab
x, y, z = np.ogrid[-10:10:20j, -10:10:20j, -10:10:20j]
s = np.sin(x*y*z)/(x*y*z)
src = mlab.pipeline.scalar_field(s)
volume = mlab.pipeline.volume(src)
lut = np.zeros((256, 4), np.uint8)
lut[:,-1] = 255
lut[:, 0] = np.linspace(0, 255, 256)
volume.module_manager.scalar_lut_manager.lut.table = lut
mlab.draw()
mlab.view(40, 85)
mlab.show()
然而,输出图始终带有标准的蓝红查找表。
我找不到使用的解决方案lut_manager
,但是下面的解决方案如下这个github回复 https://github.com/enthought/mayavi/issues/371#issuecomment-235479243对我有用。
import numpy as np
from mayavi import mlab
# import color transfer function from vtk
from tvtk.util import ctf
# import matlab colormaps
from matplotlib.pyplot import cm
x, y, z = np.ogrid[-10:10:20j, -10:10:20j, -10:10:20j]
s = np.sin(x*y*z)/(x*y*z)
src = mlab.pipeline.scalar_field(s)
volume = mlab.pipeline.volume(src)
# save the color transfer function of the current volume
c = ctf.save_ctfs(volume._volume_property)
# change the alpha channel as needed
c['alpha'][1][1] = 0.5
# change the color points to another color scheme
# in this case 'magma'
c['rgb']=[[a[0],a[1],a[2],cm.magma.colors.index(a)/255] for a in cm.magma.colors]
# load the new color transfer function
ctf.load_ctfs(c, volume._volume_property)
# signal for update
volume.update_ctf = True
mlab.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)