我试图在mayavi的文档中找到一些提示而没有任何成功。
在复杂数据的可视化中,我想删除计算的iso_surface的一部分。 例如,我有一个类似
的代码field = mlab.pipeline.gaussian_splatter(data)
iso = mlab.pipeline.iso_surface(field, contours=[0.07])
我可以通过明确解释我的数据是通过像
这样的方式限制x,y或z来删除部分iso_surfacefield.filter.model_bounds = array([-1., 1., -1., 1., -1., 1.])
但我无法找到解释这个任意定向平面的方法。例如,我想限制我的数据为(1,1,1)方向。
有办法做到这一点吗?
答案 0 :(得分:2)
您可以使用data_set_clipper
剪辑数据。限幅器是交互式的或非交互式的。我将以非交互式版本演示它:
fld = mlab.pipeline.scalar_field(data)
clip = mlab.pipeline.data_set_clipper(fld)
clip.widget.widget_mode='ImplicitPlane'
clip.widget.widget.enabled=0
clip.widget.widget.normal=(1,1,1)
clip.widget.widget.origin=(20,20,20) #(0,0,0) is not the centre but the corner
iso = mlab.pipeline.iso_surface(clip, contours=[0.07])
如果您想更频繁地剪辑,则必须将剪辑的数据放入另一个data_set_clippe
:
clip2=mlab.pipeline.data_set_clipper(clip)
但是,我对我的方法并不完全满意,因为它使用了大量资源。如果有人有更好的解决方案,我很乐意看到它。
答案 1 :(得分:0)
如果您在显示所需的表面时遇到问题,请尝试使用contours
的参数进行游戏,如果您可以在要显示的表面周围使它们足够紧,则应该得到您想要的效果。 。
如果你可以发布更多的{non,}工作示例,我可以帮忙