在Mayavi iso_surface中根据高度改变颜色



是否可以根据点的高度改变等值面的颜色(在python/mayavi中)?我可以用我的脚本创建一个iso_surface可视化,但我不知道如何让iso_surface随着z轴改变颜色,这样它就会在底部变成黑色,在顶部变成白色。我需要这一点,以便使可视化的意义,当它是直接从上面的图形观看。如果你知道任何其他方法来实现这一点,请让我知道。我只想显示一个iso_surface图

我设法通过结合来自示例http://docs.enthought.com/mayavi/mayavi/auto/example_atomic_orbital.html#example-atomic-orbital和http://docs.enthought.com/mayavi/mayavi/auto/example_custom_colormap.html的一些代码来做到这一点。基本上你必须创建一个表面在原子轨道的例子,然后使它改变颜色取决于x。你必须创建一个数组值的x。我的代码是(相关部分):

  #src.image_data.point_data.add_array(np.indices(list(self.data.shape)[self.nx,self.ny,self.nz])[2].T.ravel())
  src.image_data.point_data.add_array(np.indices(list(self.data.shape))[0].T.ravel())
  src.image_data.point_data.get_array(1).name = 'z'
  # Make sure that the dataset is up to date with the different arrays:
  src.image_data.point_data.update()
  # We select the 'scalar' attribute, ie the norm of Phi
  src2 = mlab.pipeline.set_active_attribute(src, point_scalars='scalar')
  # Cut isosurfaces of the norm
  contour = mlab.pipeline.contour(src2)
  # contour.filter.contours=[plotIsoSurfaceContours]
  # contour.filter.contours=[plotIsoSurfaceContours[0]]
  min_c = min(contour.filter._data_min * 1.05,contour.filter._data_max)
  max_c = max(contour.filter._data_max * 0.95,contour.filter._data_min)
  plotIsoSurfaceContours = [ max(min(max_c,x),min_c) for x in plotIsoSurfaceContours ]
  contour.filter.contours= plotIsoSurfaceContours
  # Now we select the 'angle' attribute, ie the phase of Phi
  contour2 = mlab.pipeline.set_active_attribute(contour, point_scalars='z')
  # And we display the surface. The colormap is the current attribute: the phase.
  # mlab.pipeline.surface(contour2, colormap='hsv')
  xxx = mlab.pipeline.surface(contour2, colormap='gist_ncar')
  colorbar = xxx.module_manager.scalar_lut_manager
  colorbar.reverse_lut = True
  lut = xxx.module_manager.scalar_lut_manager.lut.table.to_array()
  lut[:,-1] = int(plotIsoSurfaceOpacity * 254)
  xxx.module_manager.scalar_lut_manager.lut.table = lut
  # mlab.colorbar(title='Phase', orientation='vertical', nb_labels=3)

自我。数据是我的数据,由于未知的原因,如果你想设置表面的不透明度,你必须先反转lut,然后再设置不透明度。乘以254而不是255是为了避免mayavi中可能出现的错误。

相关内容

  • 没有找到相关文章

最新更新