Python/Mayavi

前言

就中国慕课mooc/科学计算三维可视化课中对遇到的题目进行记录,是鄙人自己所使用的代码。记录本人的学习日志,若有纰漏之处,希望各位看官加以斧正。

4.29 Mayavi绘图基本实例

给出如下代码:

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()

得到窗口:
得到一个类似锥子的3D图像
键盘鼠标对场景进行操作:自己可摸索

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( )对窗口参数进行修改:

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( )应用举例

给出如下代码:

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
给出如下代码:
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

给出如下代码:

import numpy
from mayavi import mlab
#建立数据
s = numpy.random.random((10,10))

#对数据进行可视化
#'gist_earth'所谓地图颜色
img = mlab.imshow(s, colormap = 'gist_earth')
mlab.show()

改变实体颜色

给出以下代码——可对显示物体外观(颜色,透明度)的方式作出调整:

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)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值