三流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.——追加目錄,應用舉例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章