三流Mayavi操作-Mayav-2.1.0 绘制函数,通用参数、目录。

秉着边学边写边折腾的原则,开始粗糙的工作。真正掌握还是得讲解给别人听。
先给出网课
https://www.icourse163.org/course/BIT-1001871001
Mayavi官方
http://docs.enthought.com/mayavi/mayavi/index.html

.

2.0.简述(1)

2.1 .mlab图形可视化,图像操作

2.1.0 绘图函数

2.1.0.0 绘图函数,通用参数
2.1.0.1 .barchart
2.1.0.2 .mesh,.triangular_mesh
2.1.0.3 .imshow,.plot3d
2.1.0.4 .surf,.contour_surf,.contour3d
2.1.0.5.points3d,.quiver3d
2.1.0.6.flow,.volume_slice
2.1.0.7 补充、对比及总结
2.1.0.8 绘图常用的技巧

2.1.1 图像控制

2.1.1.0

2.1.2 图像修饰
2.1.3 相机控制
2.1.4 其他

2.2.api操作管线对象,窗口对象

2.2.0 总体
2.2.1 Data representation
2.2.2 脚本录制

其他

应用举例

这一节完全可以先跳过,直接看可能会有断层感,先看2.1.1之后,需要什么参数再倒回来看这篇。
这样写有一定好处,把共同的部分单拎出来,然后把12个绘图函数进行分类,一网打尽,这样可以降低每一篇的篇幅,我的观点是脉络第一,py本身为简洁而来,不能为了内容的完备牺牲篇幅。
然后我再写某一类绘制函数的时候(比如meshtriangular_mesh归为一类),对外可以直接写它们特殊的地方,不同于其他函数的参数,就不再说它的通用参数,对内,可以写这两个函数之间本身的不同。必要的话,可以留一个跳转。然后我可以在控制篇幅的情况下,尝试写更多的例子玩,就这样。
.
.
.
这一节直接写12个绘图函数都具备的通用参数
barchar,contour3d,contour_surf,flow,imshow,mesh,plot3d,points3d,quiver3d,surf,triangular_mesh
绘制图形的参数共有35个:
auto_scale,color,colormap,contours,extent,figure,interpolate,integration_direction,
lateral_scale,line_width,linetype,mask,mask_points,mode,name,opacity,plane_opacity,
plane_orientation,representation,reset_zoom,resolution,scalars,seed_resolution,
seed_scale,seed_visible,seedtype,scale_factor,scale_mode,slice_index,transparent,
tube_radius,tube_sides,vmax,vmin,warp_scale
不同的绘制函数对应的参数有所不同,
比如barchart绘制函数含有一个auto_scale参数是其他所有函数不具备的,而meshtriangular_mesh的参数却又完全相同,但是绘制的网格又不一样。volume_slice就很厉害了,别人有的他都没有,只有通用参数,但是这个函数又非常有用。
在这里插入图片描述
这个图是去除了flow的图,(flow有几个参数很特别,加上之后图会很长放不下)再把通用参数去掉,这样一目了然。哪些有哪些没有。
这个图是第一次出现,后面还会出现,还有其他的图。

通用参数

这35个参数中,有9个是所有绘制函数都具备的。以下列出,并一一说明。
color,colormap,line_width,name,opacity,reset_zoom,transparent,vmax,vmin

color

the color of the vtk object. Overides the colormap, if any, when specified. This is specified as a triplet of float ranging from 0 to 1, eg (1, 1, 1) for white.
VTK对象颜色,接受三维浮点数组
增设参数之后color = (1,1,0)
实际上Actor中你会发现(255,255,0),如果是(0.5,0,0),就会发现(127,0,0)暗红色
在这里插入图片描述

colormap

type of colormap to use.
这个怎么翻译呢,要我说就是配色方案
在这里插入图片描述
要把Scale visibility勾选了,Color可能会把colormap的配色方案覆盖掉,当前采用的是
mesh(x, y, z,color=(1,1,0),colormap='Wistia')
这两者区别在于color配置的是整个实体的颜色,是单一色
colormap配置的是标量的颜色,是渐变色标量!标量!标量!敲黑板!!

line_width

The width of the lines, if any used. Must be a float. Default: 2.0
线宽,处于Actor下,默认值是2.0,我们来试试0.1线宽效果
mesh(x, y, z, representation='wireframe',colormap='Wistia',line_width = 0.1)
在这里插入图片描述
是不是很se.qing,sexy!敲漂亮!蝉翼般的效果。

name

the name of the vtk object created.
这个是VTK对象的名字
mesh(x,y,z,name='修改的是这个位置')
默认是GridSourse,被name修改成了。。emm
在这里插入图片描述
多说一句,Mayavi Scene1的层级不是最高级,最高级是Engine并没有显示在视图中,它的作用就是建立、销毁Scenes,而Scenes场景中可以包含不止一个数据集合Sources,Sources为Mayavi可视化提供数据。也就是说,Scenes下,可以建立不止一组数据源Sources,比如构造组合体。
这部分内容属于管线配置,这里只是BB一下,详细的内容到2.2再说。
留一个链接:

opacity

The overall opacity of the vtk object. Must be a float. Default: 1.0
VTK对象的整体透明度设置,接受浮点数,缺省值是1.0,也就是完全不透明。
这个是一个非常实用的技巧。
mesh(x,y,z,opacity=0.3)
在这里插入图片描述
这个在管线里面也可以写,只是相对麻烦一些。剥洋葱。

reset_zoom

Reset the zoom to accomodate the data newly added to the scene. Defaults to True.
对新加入的场景数据放缩进行重置,默认值为True
用一个官方例子来进行说明。

import numpy as np
from mayavi import mlab
x, y = np.mgrid[0:3:1,0:3:1]
s = mlab.surf(x, y, np.asarray(x*0.1, 'd'),
              representation='wireframe')
# mlab.show()                     #a位置
fig = mlab.gcf()
ms = s.mlab_source
for i in range(5):
    x, y = np.mgrid[0:3:1.0/(i+2),0:3:1.0/(i+2)]
    sc = np.asarray(x*x*0.05*(i+1), 'd')
    ms.reset(x=x, y=y, scalars=sc)
    fig.scene.reset_zoom()
    # mlab.show()                     #b位置
mlab.show()                        #c位置

reset_zoom做了一件什么事呢,就是调整了show的时候的放大倍率,如果只得到结果图reset_zoom()不必写进循环。但是如果要生成很多过程图的话,这个动作就很有必要了。每重载一次都需要更新一次场景数据放缩,我把原代码中的一句注释去掉了# Animate the data.似乎目的就是生成过程图。下面是图
在这里插入图片描述

源代码中abc三个位置都没加show(),于是产生了一个问题,好奇驱使(画蛇添足)的我在调试这段代码的时候发现了点问题
1.a位置加上show,出现了一个2X2的图像(wireframe显示的是网格线),b位置注释掉,c位置show了一张什么都没有的空图像。同时窗口界面变成了Mayavi Scene2
2.注释掉a和b位置的show,图像显示正常,显示为最终结果,毕竟中间过程的图像被注释掉了。最终结果呈现的是Mayavi Scene1
3.注释掉a和c位置,仅保留中间过程的show,结果只能显示第一次的图像。不得已加上if分别得到了中间的图像,结果和开始想的一样,只能得到一次Mayavi Scene1,于是喜提一条报错信息
.
'NoneType' object has no attribute 'reset_zoom'
File "F:\py_78\三维可视\csdn 2.1.1.mesh.py", line 13, in <module>fig.scene.reset_zoom()
.
这个报错是能预见到的,show()reset_zoom()之后,如果show创建了新Scene,那么循环的时候fig.scene.reset_zoom()的是这个新场景。

所以我猜测,show可能清掉了数据,或者修改了fig,使得reset_zoom()报错了,我还没能解决这个问题。

transparent

make the opacity of the actor depend on the scalar.
这个是一个奇怪的参数,根据标量的值设置actor的透明度。
我用contour3d来举个栗子,此处不讲
来对比一下
首先是原图
mlab.contour3d(scalars,contours = 8)
在这里插入图片描述
其次是设置了opacity之后的
mlab.contour3d(scalars,contours = 8,opacity = 0.5)
内部已经可以看到了,但是整体效果不好。
在这里插入图片描述
最后是transparent
mlab.contour3d(scalars,contours = 8,transparent=True)
内部信息看得到,最外层非常清晰。
在这里插入图片描述
讲道理最后一个效果确实好很多,标量可视化绘制了等高。opacitytransparent的不同很明显了,前者是整体透明度,后者是根据标量的值设置了透明度,标量值越大,mapper映射得越红,透明度越低,如果需要看到图形内部,做这样一个透视是非常有效的方法。

1.现在有一个问题,进一步,如果要过滤一些值,显示某一部分信息应该怎么完成?
2.如何交换透明度,我想让内部到外部越来越透明,跟栗子相反如何实现?(可以考虑添加负号)

vmaxvmin

vmax is used to scale the colormap. If None, the max of the data will be used
vmin is used to scale the colormap. If None, the min of the data will be used
这个是用来控制颜色映射方案的,vmin和vmax的默认值就是值域,对于下面这个例子就是[0,75]
还是用上面那段代码好了
x,y,z = np.ogrid[-5:5:64j,-5:5:64j,-5:5:64j]
scalars = x*x + y*y + z*z
这里分别设置了vmin为30和40,图像就是下面两个。
mlab.contour3d(scalars,contours = 8,transparent=True,vmin=30)
mlab.contour3d(scalars,contours = 8,transparent=True,vmin=40)
我试过70,会报错,但是图像还是出的来,越来越冰凉了哈,
vmax也可以试一下,只不过会变红,低于vmin会被映射为蓝色,高于vmax会被映射为红色,因为默认值是最小值最大值,所以红色和蓝色都只会有一层,之后配色方案colormap将在[vmin,vmax]之间映射。

我猜,报错的原因是因为颜色变化梯度不够,所幸报错之后图像仍然是可以看得到的。
RROR: In D:\Build\VTK\VTK-7.1.1\Common\Core\vtkLookupTable.cxx, line 144
vtkLookupTable (000001BABA99A7E0): Bad table range: [74, 73.3502]
以上是报错信息,但我还不知道根本原因,先放在这里。

在这里插入图片描述

以上就是9个通用参数,后期会再补充例子,调整了文章结构,从mesh里面转过来降低原来文章的篇幅,读起来可能会有问题,后期再更。
.
.
.

填坑区:

更新
2018.10.07. ——将原来写的mesh的文调整,粘贴过来,大幅度降低文章篇幅。
2018.10.07.——二更附上参数对比图。
2018.10.14.——2.2.1.Data representation翻译基本完成,代码未调试未解释
2018.10.20.——2.2.1.Data representation翻译基本完成,代码未调试。
2018.10.23.——追加目录,应用举例

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值