秉着边学边写边折腾的原则,开始粗糙的工作。真正掌握还是得讲解给别人听。 先给出网课
https://www.icourse163.org/course/BIT-1001871001
Mayavi官方
http://docs.enthought.com/mayavi/mayavi/genindex.html
(有时候这网站会装死,一般过几个小时就会活过来)
我发现了,光是三流操作还不够,还得加上四流翻译。
上一章是图像控制函数-Figure handling functions,主要是涉及,画图前后的一些工作,比如是否可视化,可视化的窗口大小,自动保存等。
相对上一章而言,这章的处理是图像的内容方面。
添加一些数据栏,坐标轴之类,这章的内容很实用,也很简短,关键是也很简单。
惯例,三节,0.老代码。1.各项参数,2.补充。(原始排版风格)
http://docs.enthought.com/mayavi/mayavi/auto/mlab_decorations.html
0.用于调试的代码
import numpy as np
from mayavi import mlab
x,y,z = np.mgrid[-5:5:24j,-5:5:24j,-5:5:24j]
u,v,w = x,x*y,z-1
mlab.figure(size=(500,540))
SimpleHandle = mlab.quiver3d(x,y,z,u,v,w)
mlab.show()
.
.
1.Figure decoration functions
colorbar
,scalarbar
,vectorbar
mayavi.mlab.colorbar(object=None, title=None, orientation=None, nb_labels=None, nb_colors=None, label_fmt=None)
Adds a colorbar for the color mapping of the given object.
If the object has scalar data, the scalar color mapping is represented. Elsewhere the vector color mapping is represented, if available. If no object is specified, the first object with a color map in the scene is used.
为映射的图像对象添加颜色条,如果对象存在标量数据,将绘制标量,如果存在矢量数据,同理。如果不指定object
对象,则将默认绘制scene
的第一个对象。
mlab.colorbar()
一下之后,因为上面那个图是矢量数据,它就绘制了一个矢量bar
这个colorbar
不是很建议采用,自动有一定好处,但是自动就容易出错。
scalarbar
,vectorbar
和colorbar
用法是一毛一样的,讲一个好了。
参数:
object
:Optional object to get the color map from
上面的那个老代码里面的
SimpleHandle
接受了操作对象的,注意SimpleHandle
的类型,是个<mayavi.modules.vectors.Vectors>
对象
所以可以指定object
给它,比如:
mlab.colorbar(object=SimpleHandle)
你如果不注明,它也不会给你添加的。如果没有标量,写了scalarbar()
它也不会给你加的,倒是GUI可以给你乱入一个。
最多print一个This object has no scalar data.
title
:The title string
colorbar
的名称。添加一个’Simple’
在show()
前面追加一行代码:
mlab.colorbar(title='Simple')
多了一行’Simple’
orientation
:Can be
'horizontal'
or'vertical'
添加的颜色条的方向,只接受'horizontal'
或'vertical'
(水平或者垂直,默认是水平horizontal
)
上面那个就是orientation
默认效果,水平。似乎是无效的,多半是个Bug。没关系,还有其他两个方法:GUI来调整。
GUI方法:如果怕出错,就不从代码设置
colorbar()
直接在GUI里面添加,他会默认放置成纵向的:得到效果:
nb_labels
:The number of labels to display on the colorbar.
colorbar
的labels
刻度数目。
mlab.colorbar(nb_labels=5)
这个有默认值8,默认标注8个刻度。可以自己赋值。它的大小会自动调整,不要赋得太大,不然会小得看不清,你就得全屏。总之不建议,默认值是比较合理的。
label_fmt
:The string formater for the labels. This needs to be a formater for float number, eg
'%.1f'
.
labels
的字符串格式。需要为浮点数设置一个格式,比如'%.1f'
,意为保留一位小数。默认值是保留2位,不是1位。保留的是有效位数,用科学计数法,不是单纯的浮点。下面举例说明。
mlab.colorbar(label_fmt='%.1f')
左边是默认的,右边是个老年人看的图。
如果数据很大,图像里面的label
采用的是科学计数法,所谓的'%.2f'
是用的
比如开始的离散x,y,z = np.mgrid[-500:500:24j,-500:500:24j,-500:500:24j]
nb_colors
:The maximum number of colors displayed on the colorbar.
colorbar
显示的颜色的最大值。
这个就是colorbar的色阶分辨率,像上面的colorbar看起来都好像是连续变化的,其实不然,只要这个数目给得小一点,就能明显看得出它是不连续的色阶。
这个只接受整型,不然就要得到以下报错:
traits.trait_errors.TraitError
The 'maximum_number_of_colors' trait of a ScalarBarActor instance must be 2 <= >>>>a long integer <= 2147483647, but a value of 20.0 <class 'float'> was specified.
把这个值放得小一点的效果:
mlab.colorbar(nb_colors=8)
.
.
xlabel
,ylabel
,zlabel
:
mayavi.mlab.xlabel(text, object=None)
mayavi.mlab.ylabel(text, object=None)
mayavi.mlab.zlabel(text, object=None)
Creates a set of axes if there isn’t already one, and sets the x(y,z) label.
如果没有设置的话,创建一组坐标轴,以及设置轴标签。
参数:
object
:The object to apply the module to, if not the whole scene is searched for a suitable object.
这个是个很实用的东西,经常和
outline()
一起配合使用
text
设置是无效的。
.
.
*一些补充
1.需要注意一下,虽然都是图像修饰函数,但是他们完全不属于一个层级
colorbar
,scalarbar
,vectorbar
主要是LUT里面的设置,colorbar
的出现不会带来一个层级。
而xlabel
,ylabel
,zlabel
则不同,它会创建一个Axes
的Module
层级
如果就层级来说的话,colorbar
所在的层级是xlabel
的父级,我不认为管线配置里面的子级父级是包含关系,而是认为是流程关系,绘制顺序的关系,而同级的顺序直接可以交换。
2.两类图形修饰函数,都有Bug,前者是scalarbar的方向,解决方式是GUI,后者是text设置,就目前提过的内容来说,还没有可行的方法来改变。如果有人知道,请告诉我~
3.绘图的时候往往会这样补充:
xlabel()
outline()
在最后的show之前增设外轮廓和坐标轴。
填坑区:
1.colorbar
的Bug
2.xlabel
的text Bug
更新(18.12.13已更完)
2018.12.13.——一次更完。