To point out shape correspondences I've created, I would like to color a 3d mesh in gray, except some points (e.g. 1 point) in red.
Here's my current code, which Unfortunately colors the whole figure in blue, and the last point in red.
And my code
mlab.figure()
part_color = np.full((self.f.shape[0]),0.98)
part_color[point_idx] = 1
part_plot = mlab.triangular_mesh(self.part.vx, self.part.vy, self.part.vz, self.part.triv,
scalars=part_color[:, np.newaxis])
Here is optimally what I'm aiming for (ignore the rest of the figures, I just want a red ball around some points)
you have to modify the Look Up Table (LUT) for that.
I took the "LUT modification" example and adapted it to your needs (highest value is red, everything else is gray):
# Create some data
import numpy as np
x, y = np.mgrid[-10:10:200j, -10:10:200j]
z = 100 * np.sin(x * y) / (x * y)
# Visualize it with mlab.surf
from mayavi import mlab
mlab.figure(bgcolor=(1, 1, 1))
surf = mlab.surf(z, colormap='cool')
# Retrieve the LUT of the surf object.
lut = surf.module_manager.scalar_lut_manager.lut.table.to_array()
# The lut is a 255x4 array, with the columns representing RGBA
# (red, green, blue, alpha) coded with integers going from 0 to 255.
# We modify the alpha channel to add a transparency gradient
lut[:] = 255/2 # all grey
# red
lut[-1,0] = 255
lut[-1,1] = 0
lut[-1,2] = 0
lut[:, -1] = 255 # 100% translucency
# and finally we put this LUT back in the surface object. We could have
# added any 255*4 array rather than modifying an existing LUT.
surf.module_manager.scalar_lut_manager.lut.table = lut
# We need to force update of the figure now that we have changed the LUT.
mlab.draw()
mlab.view(40, 85)