1

ポイントの高さに応じて等値面の色を変更することは可能ですか(python / mayaviの場合)?スクリプトを使用して等値面の視覚化を作成できますが、等値面をz軸で色を変更して、プロットの下部が黒、上部が白になるようにする方法がわかりません。グラフの真上から見たときの視覚化を理解するために、これが必要です。これを達成する他の方法を知っている場合は、私にも知らせてください。iso_surfaceプロットを1つだけ表示したいと思います。

4

1 に答える 1

1

http://docs.enthought.com/mayavi/mayavi/auto/example_atomic_orbital.html#example-atomic-orbitalhttp://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)

self.dataは私のデータです。理由は不明ですが、表面の不透明度を設定する場合は、最初にlutを反転してから、不透明度を設定する必要があります。mayaviで発生する可能性のあるバグを回避するために、255ではなく254による乗算が行われます。これが誰かに役立つことを願っています。

于 2013-04-02T14:20:28.183 に答える