Mlab了解
Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化。
过程为:
1.建立数据源
2.使用Filter(可选)对数据进行加工
3.添加可视化模块,我们可以通过修改可视化模块的属性,来修改可视化场景
mgrid和ogrid区别
一:基于Numpy数组的绘图函数
(一)3D绘图函数--Point3d(点图像0维)
这里我们可以看到Point3D参数的描述,是对vtk对象的整体描述,因为Mayavi是对VTK的整体封装,因此Mayavi建立的对象也就是VTK的对象
import numpy
as np
from mayavi import mlab
#建立数据
t = np.linspace(
0,
4*np.pi,
20) #linspace根据起止数据等间距填充数据,分为20组,所以下面将产生20个点
x = np.sin(
2*
t)
y =
np.cos(t)
z = np.cos(
2*
t)
s =
2 +
np.sin(t)
#对数据进行可视化
points = mlab.points3d(x,y,z,s,colormap=
"Reds",scale_factor=.
25)
mlab.show()
mlab.points3d(x,y,z,s,colormap=
"Reds",scale_factor=.
25) #x,y,z表示Numpy数组,列表或者其他形式的点三维坐标,s表示在该点处的标量值,scale_factor放缩比例
这里:标量值越大,点的尺寸越大,颜色越红
points = mlab.points3d(x,y,z,s,colormap=
"Greens",scale_factor=.
25)
Mayavi.mlab.show建立了简单的GUI,并开始了事件循环,stop用来定义GUI的事件循环是否结束
(二)3D绘图函数--plot3d(线图形一维)
import numpy
as np
from mayavi import mlab #引入mlab库
#建立数据
n_mer,n_long =
6,
11
dphi = np.pi /
1000.0
phi = np.arange(
0.0,
2*np.pi+
0.5*
dphi,dphi)
mu = phi *
n_mer
x = np.cos(mu)*(
1+np.cos(n_long*mu/n_mer)*
0.5)
y = np.sin(mu)*(
1+np.cos(n_long*mu/n_mer)*
0.5)
z = np.sin(n_long*mu/n_mer)*
0.5
#对数据进行可视化
l = mlab.
plot3d(x,y,z,np.sin(mu),tube_radius=
0.025,colormap=
"Spectral")
mlab.show()
(三)3D绘图函数--2D数据(二维)
(1)imshow方法
import numpy
as np
from mayavi import mlab
#建立数据
s = np.random.random((
10,
10)) #二维数据
#对数据进行可视化
img = mlab.imshow(s,colormap=
"gist_earth") #gist_earth以地球表面的色彩为颜色的颜色映射关系
mlab.show()
(2)surf方法
s:二维数组第一列表示x轴位置,第二列表示y轴位置,x,y可以是一维或者二维数组,一般情况下,他们都由numpy的mgrid或ogrid得到
import numpy
as np
from mayavi import mlab
def f(x,y):
return np.sin(x-y)+np.cos(x+
y)
x,y = np.
mgrid[-
7.:
7.05:
0.1,-
5.:
5.05:
0.05]
s =
mlab.surf(x,y,f)
mlab.show()
mgrid返回两个二维数组(个数是不固定的,我们放置几个元素,就会生成几个二维数组)
-
7.:
7.05:
0.1---->最小-
7,最大7.
05,步长为0.1依次生成一个n*n矩阵
>>> x,y = np.mgrid[-
7.:
7.05:
0.1,-
5.:
5.05:
0.05]
>>>
x
array([[-
7. , -
7. , -
7. , ..., -
7. , -
7. , -
7. ],
[-
6.9, -
6.9, -
6.9, ..., -
6.9, -
6.9, -
6.9],
[-
6.8, -
6.8, -
6.8, ..., -
6.8, -
6.8, -
6.8],
...,
[ 6.8,
6.8,
6.8, ...,
6.8,
6.8,
6.8],
[ 6.9,
6.9,
6.9, ...,
6.9,
6.9,
6.9],
[ 7. ,
7. ,
7. , ...,
7. ,
7. ,
7. ]])
>>>
y
array([[-
5. , -
4.95, -
4.9 , ...,
4.9 ,
4.95,
5. ],
[-
5. , -
4.95, -
4.9 , ...,
4.9 ,
4.95,
5. ],
[-
5. , -
4.95, -
4.9 , ...,
4.9 ,
4.95,
5. ],
...,
[-
5. , -
4.95, -
4.9 , ...,
4.9 ,
4.95,
5. ],
[-
5. , -
4.95, -
4.9 , ...,
4.9 ,
4.95,
5. ],
[-
5. , -
4.95, -
4.9 , ...,
4.9 ,
4.95,
5. ]])
(3)contour_surf() 与surf()类似,单求解的是等值线,surf求解的是曲面
import numpy
as np
from mayavi import mlab
def f(x,y):
return np.sin(x-y)+np.cos(x+
y)
x,y = np.mgrid[-
7.:
7.05:
0.1,-
5.:
5.05:
0.05]
s =
mlab.contour_surf(x,y,f)
mlab.show()
(四)3D绘图函数--3D数据(三维)
(1)contour3d方法
import numpy
as np
from mayavi import mlab
x,y,z = np.
ogrid[-
5:
5:64j,-
5:
5:64j,-
5:
5:64j] #64j表示数组长度为64
scalars = x*x + y*y +z*
z
obj = mlab.
contour3d(scalars,contours=
8,transparent=
True) #contours八个等值面 transparent该对象可以透明表示,可以查看内部
mlab.show()
ogrid返回3个三维数组(几个是不固定的,我们设置了几个元素,就生成相对应个三维数组)
>>> x,y,z = np.ogrid[-
5:
5:64j,-
5:
5:64j,-
5:
5:64j]
>>>
x
array([[[-
5. ]], #共64个元素
[[-
4.84126984]],
[[-
4.68253968]],
.......
[[ 4.68253968]],
[[ 4.84126984]],
[[ 5. ]]])
(2)quiver3d()方法
(x,y,z表示箭头位置,二维即可,不需要三维表示)
import numpy as npfrom mayavi import mlabx,y,z = np.mgrid[-2:3,-2:3,-2:3]r = np.sqrt(x**2 + y**2 + z**4)u = y*np.sin(r)/(r+0.001)v = -x*np.sin(r)/(r+0.001)w = np.zeros_like(z)obj = mlab.
quiver3d(x,y,z,u,v,w,line_width=3,scale_factor=1)mlab.show()
转载于:https://www.cnblogs.com/ssyfj/p/9303698.html
相关资源:各显卡算力对照表!