13. 可视化实例

文章目录

  • 标量数据可视化
    • 等值面
    • 切平面
    • 复合观测
  • 矢量数据可视化
    • Quiver绘制
    • Masking Vector采样
    • Cut Plane切面
    • 级数的等值面
    • Flow可视化
    • 复合观测

标量数据可视化

等值面

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)

mlab.contour3d(s)
mlab.show()

13. 可视化实例_第1张图片

切平面

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)


mlab.pipeline.image_plane_widget(mlab.pipeline.scalar_field(s),  # 数据的标量数据场
                                 plane_orientation='x_axes',  # 切平面的方向
                                 slice_index=10
                                 )
mlab.pipeline.image_plane_widget(mlab.pipeline.scalar_field(s),
                                 plane_orientation='y_axes',
                                 slice_index=10
                                 )
mlab.outline()
mlab.show()

13. 可视化实例_第2张图片

复合观测

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)
mlab.pipeline.iso_surface(src, contours=[s.min() + 0.1 * s.ptp(), ], opacity=0.1)
mlab.pipeline.iso_surface(src, contours=[s.max() - 0.1 * s.ptp(), ])
mlab.pipeline.image_plane_widget(src,
                                 plane_orientation='z_axes',
                                 slice_index=10,
                                 )
mlab.show()

矢量数据可视化

Quiver绘制

import numpy as np
from mayavi import mlab

x, y, z = np.mgrid[0:1:20j, 0:1:20j, 0:1:20j]
u = np.sin(np.pi * x) * np.cos(np.pi * z)
v = -2 * np.sin(np.pi * y) * np.cos(2 * np.pi * z)
w = np.cos(np.pi * x) * np.sin(np.pi * z) + np.cos(np.pi * y) * np.sin(2 * np.pi * z)

mlab.quiver3d(u, v, w)
mlab.outline()

mlab.show()

13. 可视化实例_第3张图片

Masking Vector采样

import numpy as np
from mayavi import mlab

x, y, z = np.mgrid[0:1:20j, 0:1:20j, 0:1:20j]
u = np.sin(np.pi * x) * np.cos(np.pi * z)
v = -2 * np.sin(np.pi * y) * np.cos(2 * np.pi * z)
w = np.cos(np.pi * x) * np.sin(np.pi * z) + np.cos(np.pi * y) * np.sin(2 * np.pi * z)

src = mlab.pipeline.vector_field(u, v, w)
mlab.pipeline.vectors(src,
                      mask_points=10,  # 每10个点取一个点
                      scale_factor=2.0  # 放缩比例
                      )
mlab.show()

13. 可视化实例_第4张图片

Cut Plane切面

import numpy as np
from mayavi import mlab

x, y, z = np.mgrid[0:1:20j, 0:1:20j, 0:1:20j]
u = np.sin(np.pi * x) * np.cos(np.pi * z)
v = -2 * np.sin(np.pi * y) * np.cos(2 * np.pi * z)
w = np.cos(np.pi * x) * np.sin(np.pi * z) + np.cos(np.pi * y) * np.sin(2 * np.pi * z)

src = mlab.pipeline.vector_field(u, v, w)
mlab.pipeline.vector_cut_plane(src,
                               mask_points=10,  # 每10个点取一个点
                               scale_factor=2.0  # 放缩比例
                               )
mlab.show()

Mac上闪退……
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

13. 可视化实例_第5张图片

级数的等值面

import numpy as np
from mayavi import mlab

x, y, z = np.mgrid[0:1:20j, 0:1:20j, 0:1:20j]
u = np.sin(np.pi * x) * np.cos(np.pi * z)
v = -2 * np.sin(np.pi * y) * np.cos(2 * np.pi * z)
w = np.cos(np.pi * x) * np.sin(np.pi * z) + np.cos(np.pi * y) * np.sin(2 * np.pi * z)

src = mlab.pipeline.vector_field(u, v, w)
magnitude = mlab.pipeline.extract_vector_norm(src)
mlab.pipeline.iso_surface(magnitude, contours=[2.0, 0.5])
mlab.outline()

mlab.show()

13. 可视化实例_第6张图片

Flow可视化

import numpy as np
from mayavi import mlab

x, y, z = np.mgrid[0:1:20j, 0:1:20j, 0:1:20j]
u = np.sin(np.pi * x) * np.cos(np.pi * z)
v = -2 * np.sin(np.pi * y) * np.cos(2 * np.pi * z)
w = np.cos(np.pi * x) * np.sin(np.pi * z) + np.cos(np.pi * y) * np.sin(2 * np.pi * z)

flow = mlab.flow(u, v, w, seed_scale=1,
                 seed_resolution=5,
                 integration_direction='both' # 'forword' 'backword' 'both'
                 )

mlab.outline()
mlab.show()

13. 可视化实例_第7张图片

复合观测

import numpy as np
from mayavi import mlab

x, y, z = np.mgrid[0:1:20j, 0:1:20j, 0:1:20j]
u = np.sin(np.pi * x) * np.cos(np.pi * z)
v = -2 * np.sin(np.pi * y) * np.cos(2 * np.pi * z)
w = np.cos(np.pi * x) * np.sin(np.pi * z) + np.cos(np.pi * y) * np.sin(2 * np.pi * z)

src = mlab.pipeline.vector_field(u, v, w)
magnitude = mlab.pipeline.extract_vector_norm(src)

iso = mlab.pipeline.iso_surface(magnitude, contours=[2.0, ], opacity=0.3)
vec = mlab.pipeline.vectors(magnitude, mask_points=40,
                            line_width=1,
                            color=(0.8, 0.8, 0.8),
                            scale_factor=4.)
flow = mlab.pipeline.streamline(magnitude, seedtype='plane',
                                seed_visible=False,
                                seed_scale=0.5,
                                seed_resolution=1,
                                linetype='ribbon')
vcp = mlab.pipeline.vector_cut_plane(magnitude, mask_points=2,
                                     scale_factor=4,
                                     colormap='jet',
                                     plane_orientation='x_axes')

mlab.outline()
mlab.show()

在Mac上仍然由于vector_cut_plane导致闪退。

你可能感兴趣的:(Python科学计算三维可视化)