Mayavi庫的基本元素
Mayavi庫中主要有兩大部分功能
一類是用於處理圖形可視化和圖形操做的mlab模塊
一類是操做管線對象窗口對象的api
mlab包含html
繪圖函數:實現已有的數據進行可視化顯示,能夠是numpy數組構建的,也能夠是外部讀取的,好比讀取一個文件api
圖形控制函數:實質上是對mayavi中的figure進行控制,好比能夠經過gcf得到當前視圖的指針,也能夠經過clf來清空當前圖形,經過close關閉當前圖形
圖形修飾函數:對當前繪製的函數進行必定的修飾和裝飾,好比說繪製完圖形以後須要增長一個顏色標識欄
圖形控制函數,其餘函數和Mlab管線控制函數或者是對座標軸增長相應的標籤等,好比使用xlaber能夠在x軸上增長相應的標籤
相機控制函數:對相機的操做,好比說move函數來移動相機到某個位置上,使用pitch,roll,yaw函數控制相機進行旋轉等
其餘函數:
animate:生成一段動態的可視化效果
get_engine:得到當前管線的engine
Mlab管線控制:能夠設置當前管線的數據源也能夠爲當前繪製管線增長數據集使用addataset等
Mayavi API
管線基礎對象:能夠經過這類函數得到Mayavi管線的各個基本對象
包括Scene,Source,Filter,ModuleManager,Module,PipelineBase,Engine等
主視窗和UI對象:用於視圖繪製和UI繪製的
好比MayaviScene,SceneEditor等。咱們能夠在其餘庫中構建的用戶界面裏嵌入Mayavi窗口
好比能夠結合TraitsUI和Mayavi構建一個可交互的三維可視化應用數組
mayavi的官方網址其中有全部的函數說明地址:
http://docs.enthought.com/mayavi/mayavi/index.html函數
#快速繪圖實例 ''' mayavi跟tvtk相比提供了更方便的可視化功能 經過調用mlab.mash繪製一個三維空間中圖形的實例 mayavi中mlab模塊提供了方便快捷地繪製三維圖發函數 只要把數據準備好,一般只須要調用一次mlab的函數就能夠看到數據的三維可視化效果 ''' >>> x = [[-1,1,1,-1,-1],[-1,1,1,-1,-1]] >>> y = [[-1,-1,-1,-1,-1],[1,1,1,1,1]] >>> z = [[1,1,-1,-1,1],[1,1,-1,-1,1]] >>> from mayavi import mlab >>> s = mlab.mesh(x,y,z)
運行結果:spa
程序分析:x,y,z數組對應座標的元素組成了三維座標點命令行
ash函數的三個數組參數xyz是二維數組,
他們相同下標的三個元素組成了曲面上某點的三維座標
點之間的鏈接關係好比邊和麪由其在x,y,z數組中間的位置關係所決定
因爲以上程序所計算的曲面是個旋轉體,
曲面上的各個點的座標是在球面座標系中計算的
這些信息能夠在x,y,z的座標計算中獲得
而後根據座標轉換公式將球面座標轉換成xyz座標
按住shift鍵用左鍵對場景進行拖動平移場景或用shift+鍵盤鍵進行拖動
鼠標右鍵上下拖動或使用+-按鍵進行場景縮放
按ctrl鍵+左鍵拖動能夠滾動相機
在程序中,經過傳遞關鍵字representation給mash函數能夠指定繪製的表現形式
若是默認的,是surface咱們能夠換成wireframe或pointsscala
Mayavi管線的層級
最高層
Engine:創建和銷燬場景Scene,並不顯示在視圖中
Scence場景:每一個場景下有多個數據集合Sources,爲Mayavi可視化提供了數據
Filter:應用於Scence上對數據進行變換
Module Manager:用來控制顏色,用來表示標量和矢量數據,
在pipline視圖中表示爲Colors and Legends節點
可視化Modules:用於最終數據的顯示,如線條,平面等3d
#能夠經過mlab.show_pipline()或點擊左側的第一個按鈕顯示mayavi管線的對話框 #點開之後能夠看見左側用樹狀控件顯示的mayavi一系列管線 #爲深刻了解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() ''' 管線中的對象scene Mayavi Scene:處於樹的最頂層的對象,表示場景。 其配置界面中能夠設置場景的背景,前景色,場景中的燈光及其餘一些選項 ''' >>> s = mlab.gcf()#獲取對象的背景色(獲取當前場景) >>> print(s)#輸出當前的對象狀態 <mayavi.core.scene.Scene object at 0x00000009C07DA990> >>> print(s.scene.background)#輸出當前場景的背景色 (0.5, 0.5, 0.5) >>> ''' 下一級GridSource網格數據源 在配置界面中每一項爲每一個點所對應的標量數據的名稱 在本例中只有一個名爲scalars的標量數據, 它是傳遞給mash的數組,它表示mash表面的每一個點的數據 ''' >>> source = s.children[0]#獲取GridSource對象 >>> print(repr(source))#返回的字符串是VTKDataSource形式 <mayavi.sources.vtk_data_source.VTKDataSource object at 0x000000F7E93E6E60> >>> print(source.name)#獲取該節點名稱 GridSource >>> print(repr(source.data.points))#GridSource的座標後面length=多少就是座標數組大小是多少 [(0.0, 2.0, 0.0), ..., (-0.025048897296365225, -1.9933803751132322, -0.00031479029697865414)], length = 126504 >>> print(repr(source.data.point_data.scalars))#經過print函數打印出每一個點對應的標量數組 [0.0, ..., -0.00031479029697865414], length = 126504 >>> ''' 管線中的下一級對象PolydataNormals PolydataNormals是數據源的法向量 ''' >>> manager = source.children[0]#打印出PolydataNormals的相關信息 >>> print(manager) <mayavi.filters.poly_data_normals.PolyDataNormals object at 0x000000F7E9F48D58> >>> ''' 管線中的下一級對象Colors and legends 在colors and legends對象配置頁面中 Scalar LUT選項卡能夠設置將標量轉化爲顏色的查詢表 例如將LUT_mode改爲Blues這樣場景中的物體顏色會顯示成白色到深藍色的漸變 若是勾選選項Show legerd選擇框在場景中將添加一個顏色條來顯示顏色和標量之間的關係 固然,也能夠經過程序更改這兩個選項 ''' >>> colors = manager.children[0]#獲取Colors and legends第一個子節點 >>> colors.scalar_lut_manager.lut_mode = 'Blues' >>> colors.scalar_lut_manager.show_legend = True ''' 再在管線的下一級看一下surface對象 surface對象將GridSource輸出的PolyData數據轉換爲最終在場景中顯示的三維實體 經過它的配置界面Actor選項卡能夠對實體進行配置 例如咱們將Reprentation設置成wireframe並將Line width設置爲0 則實體最終採用細線框來顯示 同時咱們將opasity設爲0.6則實體變爲半透明的狀態 一樣,咱們也能夠經過命令行的方式來更改這些屬性 ''' >>> surface = colors.children[0]#獲取colors的第一個子節點 >>> surface.actor.property.representation = 'wireframe' >>> surface.actor.property.opacity = 0.6 >>> mlab.show() ''' 【總結】 程序配置屬性的整個步驟能夠描述爲 1.得到場景對象,mlab.gcf() 2.經過每一個對象的children屬性,在管線中找到須要修改的對象 3.當其配置窗口中有多個選項卡的時候,或者有多個配置數組框時,屬性須要一級一級得到 在程序配置屬性的時候,爲了方便配置各類屬性的程序,mayavi提供了腳本錄製功能 單機視圖中的紅色圓點,會打開一個腳本對話框 以後的界面配置操做都會被記錄到此對話框中 ''' #思考:對比tvtk和mayavi的管線,看看它們之間有什麼不一樣
運行結果:指針