Python/Mayavi/text
- 前言
- 4.29 Mayavi绘图基本实例
- 4.30 Mayavi管线
- 5.1 Mayavi/3D绘图函数
- Point3D( )应用举例
- plot3d( ) 应用举例
- 3D绘图函数-2D数据
- imshow( )应用举例
- 改变实体颜色
- 5.2 mlab函数
- mlab控制函数
- 图像装饰函数
- 相机控制函数
- 其它控制函数
前言
就中国慕课mooc/科学计算三维可视化课中对遇到的题目进行记录,是鄙人自己所使用的代码。记录本人的学习日志,若有纰漏之处,希望各位看官加以斧正。
4.29 Mayavi绘图基本实例
给出如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from numpy import pi, sin, cos, mgrid from mayavi import mlab #建立数据 dphi, dtheta = pi/250.0, pi/250.0 [phi,theta] = mgrid[0:pi+dphi*1.5:dphi,0:2*pi+dtheta*1.5:dtheta] m0 = 4; m1 = 3; m2 = 2; m3 = 3; m4 = 6; m5 = 2; m6 = 6; m7 = 4; r = sin(m0*phi)**m1 + cos(m2*phi)**m3 + sin(m4*theta)**m5 + cos(m6*theta)**m7 x = r*sin(phi)*cos(theta) y = r*cos(phi) z = r*sin(phi)*sin(theta) #对该数据进行三维可视化 s = mlab.mesh(x, y, z) mlab.show() |
得到窗口:

键盘鼠标对场景进行操作:自己可摸索
4.30 Mayavi管线
Engine:建立和销毁Scenes
Scenes:多个数据集合Sources
Filters:对数据进行交换
Module Manager:控制颜色;Colors and Legends
Modules:最终数据的表示,如线条,平面
管线中的对象
| 分类 | 功能 |
|---|---|
| scene | 处于树的最顶层的对象,表示场景 |
| GridSource | |
| PlolyDataNormals | 数据源的法向量 |
| Colors and legends | |
| Surface |
程序配置属性的步骤
1.获得场景对象,mlab.gcf()
2.通过children属性,在管线中找到需要修改的对象
3.配置窗口有多个选项卡,属性需要一级一级获得
PS:在操作上,窗口界面上的文字与对象属性名的转换关系:首字母变大写,下划线变空格
根据其上实例,调用mlab.grcf( )对窗口参数进行修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | from numpy import pi, sin, cos, mgrid from mayavi import mlab #建立数据 dphi, dtheta = pi/250.0, pi/250.0 [phi,theta] = mgrid[0:pi+dphi*1.5:dphi,0:2*pi+dtheta*1.5:dtheta] m0 = 4; m1 = 3; m2 = 2; m3 = 3; m4 = 6; m5 = 2; m6 = 6; m7 = 4; r = sin(m0*phi)**m1 + cos(m2*phi)**m3 + sin(m4*theta)**m5 + cos(m6*theta)**m7 x = r*sin(phi)*cos(theta) y = r*cos(phi) z = r*sin(phi)*sin(theta) #对该数据进行三维可视化 m = mlab.mesh(x, y, z) s = mlab.gcf() print(s.scene.background) #根据选项卡标签树通过.children()逐级进入功能区 source=s.children[0] manager=source.children[0] #进入colors and legends级区,lut mode是调整颜色跨度; #show legend是勾选项:是否要显示颜色分布条 colors=manager.children[0] colors.scalar_lut_manager.lut_mode='Blues' colors.scalar_lut_manager.show_legend =True #在窗口显示为‘勾选’ #在sufzce级区,representation是调整显示图层,wireframe即线框, #suface即表层,point即点状;opacity是透明度 surface=colors.children[0] surface.actor.property.representation='wireframe' surface.actor.property.opacity=0.6 mlab.show() |
5.1 Mayavi/3D绘图函数
Point3D( )应用举例
给出如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import numpy as np from mayavi import mlab #构件坐标数据 t=np.linspace(0,4*np.pi,20) x=np.sin(2*t) y=np.cos(t) z=np.cos(2*t) s=2+np.sin(t) #3D绘图函数-Points3d(),x,y,z是三维坐标,至于s是尺寸大小吧? #colormap‘Reds’是渐变红色的意思,scale_factor是放缩比例 points=mlab.points3d(x,y,z,s,colormap='Reds',scale_factor=.25) mlab.show() |
plot3d( ) 应用举例
函数形式:plot3d(x, y, z,) plot(x, y, z, s, ,)
x, y, z表示numpy数组,或列表。给出线上连续的点的位置。
s表示该点位置上的标量。
plot3d( )所包含的参数: color ,colotmap, extent, figure, line_width, name, opacity, representation, reset_zoom, transparent, tube_radius, tube_sides, vmax
| 参数 | 说明 |
|---|---|
| tube_rdius | 线管的半径,用于描述线的粗细 |
| tube_sides | 表示线的分段数,该值为整数,默认为6 |
给出如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import numpy as np from mayavi import 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 #3D绘图函数-Points3d(),x,y,z是三维坐标,至于s是该点标量值吧? #colormap颜色模式;‘Reds’是渐变红色的意思,scale_factor是放缩比例 points=mlab.plot3d(x,y,z,np.sin(mu),tube_radius=0.025,colormap='Spectral') mlab.show() |
PS:以上Point3d( ), plot3d( )的两个例子都是利用一维数据
3D绘图函数-2D数据
| 函数 | 说明 |
|---|---|
| imshow( ) | 将二维数组可视化为一张图像 |
| surt( ) | 将二维数组可视化为一个平面,Z轴描述了数组点的高度 |
| contour_surt( ) | 将二维数组可视化等高线,高度值由数组点的值来确认 |
| mesh( ) | 绘制由三个二维数组x,y,z描述坐标点的网络平面 |
| barchart( ) | 根据二维,三维或者点云数据绘制 三维柱状图 |
| triangular_mesh( ) | 绘制由x,y,z坐标点的三角网格面 |
imshow( )应用举例
imshow( )所包含的参数:color,colotmap,extent,figure,interpolate,line_width, name, opacity, reset_zoom, transparent, vmax, vmin.
interpolate:图像中的像素是否被插值,该值为布尔型,默认为True
给出如下代码:
1 2 3 4 5 6 7 8 9 | import numpy from mayavi import mlab #建立数据 s = numpy.random.random((10,10)) #对数据进行可视化 #'gist_earth'所谓地图颜色 img = mlab.imshow(s, colormap = 'gist_earth') mlab.show() |
改变实体颜色
给出以下代码——可对显示物体外观(颜色,透明度)的方式作出调整:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import numpy as np from mayavi import mlab #建立数据 x, y = np.mgrid[-10:10:200j, -10:10:200j] z = 100 * np.sin(x * y) / (x * y) # 对数据进行可视化 #控制背景颜色bgcolor mlab.figure(bgcolor=(1, 1, 1)) surf = mlab.surf(z, colormap='cool') #访问surf对象的LUT #LUT是一个255x4的数组,列向量表示RGBA,每个值范围是0-255 #而LUT最后一列应该是控制透明度的参数,即可看出我们只是修改了最后一列的数值 lut=surf.module_manager.scalar_lut_manager.lut.table.to_array() lut[:,-1]=np.linspace(0,255,256) #增加透明梯度,修改alpha通道 surf.module_manager.scalar_lut_manager.lut.table=lut # 更新视图并显示出来 mlab.show() |
5.2 mlab函数
mlab控制函数
| 函数名称 | 说明 |
|---|---|
| clf | 清空当前图像mlab.clf(figure = None) |
| close | 关闭图像窗口 mlab.close(scene = None, all=False) |
| draw | 重新绘制当前图像 mlab.close(figure = None) |
| figure | 建立一个新的Scene或访问一个存在的Scene,mlab.figure(figure = None, bgcolor = None,engine = None, size = (400,350)) |
| gcf | 返回当前图像的handle mlab.gcf(figure = None) |
| savefig | 存储当前的前景,输出一个文件,如png,jpg,bmp,tiff,pdf,obj,vrml等 |
图像装饰函数
| 函数名称 | 说明 |
|---|---|
| colorbar | 为对象的颜色映射增加颜色条,mlab.colorbar(object=None, title=None, orientation=None, nb_labels=None, nb_colors=None, label_fmt=None |
| scalarbar | 为对象的标量颜色映射增加颜色条 |
| vectorbar | 为对象的标量颜色增加颜色条 |
| xlabel | 建立x坐标轴,并添加x轴坐标 |
| ylabel | 建立y坐标轴,并添加y轴坐标 |
| zlaybel | 建立z坐标轴,并添加z轴坐标 |
相机控制函数
| 函数名称 | 说明 |
|---|---|
| move | 移动相机和焦点 mlab.move(forward=None, right=None, up=None) |
| pitch | 沿着向‘右’轴旋转角度 mlab.pitch(degress) |
| roll | 设置/获取相机沿向前轴旋转一定角度 mlab.roll(roll=None, figure=None) |
| view | 设置/获取当前视图中相机的视点 mlab.view(azimuth=None, elevation=None, distance=None, focalpoint=None, roll=None, reset_roll=True, figure=None) |
| yaw | 沿着‘向上’轴旋转一定角度,mlab.yaw(degrees) |
其它控制函数
| 函数名称 | 说明 |
|---|---|
| animate | 动画控制函数mlab.anmate(fun=None, delay=500, ui=True) |
| axes | 为当前物体设置坐标轴 mlab.axes(*args, **kwargs) |
| outline | 为当前物体设置外轮廓 mlab.outline(*args, **kwargs) |
| show | 为当前图像开始交互 mlab.show(func=None, stop=False) |
| show_pipline | 显示mayavi的管线对话框,可一进行场景属性的设置和编辑 |
| text | 为图像添加文本 mlab.text(*args, **kwargs) |
| title | 为绘制图像建立标题 mlab.title(*args, **kwargs) |