三流Mayavi操作-Mayav-2.1.2-图形修饰函数 Figure decoration functions

秉着边学边写边折腾的原则,开始粗糙的工作。真正掌握还是得讲解给别人听。 先给出网课
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,vectorbarcolorbar用法是一毛一样的,讲一个好了。

参数:

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.
colorbarlabels刻度数目。

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则不同,它会创建一个AxesModule层级
如果就层级来说的话,colorbar所在的层级是xlabel的父级,我不认为管线配置里面的子级父级是包含关系,而是认为是流程关系,绘制顺序的关系,而同级的顺序直接可以交换。

2.两类图形修饰函数,都有Bug,前者是scalarbar的方向,解决方式是GUI,后者是text设置,就目前提过的内容来说,还没有可行的方法来改变。如果有人知道,请告诉我~

3.绘图的时候往往会这样补充:
xlabel()
outline()
在最后的show之前增设外轮廓和坐标轴。

填坑区:
1.colorbar的Bug
2. xlabel的text Bug

更新(18.12.13已更完)
2018.12.13.——一次更完。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值