程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python/Mayavi

編輯:Python

Python/Mayavi/text

  • 前言
  • 4.29 Mayavi繪圖基本實例
  • 4.30 Mayavi管線
  • 5.1 Mayavi/3D繪圖函數
    • Point3D( )應用舉例
    • plot3d( ) 應用舉例
  • 3D繪圖函數-2D數據
    • imshow( )應用舉例
    • 改變實體顏色
  • 5.2 mlab函數
    • mlab控制函數
    • 圖像裝飾函數
    • 相機控制函數
    • 其它控制函數

前言

就中國慕課mooc/科學計算三維可視化課中對遇到的題目進行記錄,是鄙人自己所使用的代碼。記錄本人的學習日志,若有纰漏之處,希望各位看官加以斧正。

4.29 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()

得到窗口:

鍵盤鼠標對場景進行操作:自己可摸索

4.30 Mayavi管線

Engine:建立和銷毀Scenes
Scenes:多個數據集合Sources
Filters:對數據進行交換
Module Manager:控制顏色;Colors and Legends
Modules:最終數據的表示,如線條,平面

管線中的對象

分類功能scene處於樹的最頂層的對象,表示場景GridSourcePlolyDataNormals數據源的法向量Colors and legendsSurface

程序配置屬性的步驟
1.獲得場景對象,mlab.gcf()
2.通過children屬性,在管線中找到需要修改的對象
3.配置窗口有多個選項卡,屬性需要一級一級獲得
PS:在操作上,窗口界面上的文字與對象屬性名的轉換關系:首字母變大寫,下劃線變空格

根據其上實例,調用mlab.grcf( )對窗口參數進行修改:

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)
#對該數據進行三維可視化
m = mlab.mesh(x, y, z)
s = mlab.gcf()
print(s.scene.background)
#根據選項卡標簽樹通過.children()逐級進入功能區
source=s.children[0]
manager=source.children[0]
#進入colors and legends級區,lut mode是調整顏色跨度;
#show legend是勾選項:是否要顯示顏色分布條
colors=manager.children[0]
colors.scalar_lut_manager.lut_mode='Blues'
colors.scalar_lut_manager.show_legend =True #在窗口顯示為‘勾選’
#在sufzce級區,representation是調整顯示圖層,wireframe即線框,
#suface即表層,point即點狀;opacity是透明度
surface=colors.children[0]
surface.actor.property.representation='wireframe'
surface.actor.property.opacity=0.6
mlab.show()

5.1 Mayavi/3D繪圖函數

Point3D( )應用舉例

給出如下代碼:

import numpy as np
from mayavi import mlab
#構件坐標數據
t=np.linspace(0,4*np.pi,20)
x=np.sin(2*t)
y=np.cos(t)
z=np.cos(2*t)
s=2+np.sin(t)
#3D繪圖函數-Points3d(),x,y,z是三維坐標,至於s是尺寸大小吧?
#colormap‘Reds’是漸變紅色的意思,scale_factor是放縮比例
points=mlab.points3d(x,y,z,s,colormap='Reds',scale_factor=.25)
mlab.show()

plot3d( ) 應用舉例

函數形式:plot3d(x, y, z,) plot(x, y, z, s, ,)
x, y, z表示numpy數組,或列表。給出線上連續的點的位置。
s表示該點位置上的標量

plot3d( )所包含的參數: color ,colotmap, extent, figure, line_width, name, opacity, representation, reset_zoom, transparent, tube_radius, tube_sides, vmax

參數說明tube_rdius線管的半徑,用於描述線的粗細tube_sides表示線的分段數,該值為整數,默認為6給出如下代碼:
import numpy as np
from mayavi import mlab
#構件坐標數據
n_mer, n_long = 6,11
dphi = np.pi/1000.0
phi = np.arange(0.0,2*np.pi + 0.5*dphi, dphi)
mu=phi*n_mer
x=np.cos(mu)*(1+np.cos(n_long*mu/n_mer)*0.5)
y=np.sin(mu)*(1+np.cos(n_long*mu/n_mer)*0.5)
z=np.sin(n_long*mu/n_mer)*0.5
#3D繪圖函數-Points3d(),x,y,z是三維坐標,至於s是該點標量值吧?
#colormap顏色模式;‘Reds’是漸變紅色的意思,scale_factor是放縮比例
points=mlab.plot3d(x,y,z,np.sin(mu),tube_radius=0.025,colormap='Spectral')
mlab.show()

PS:以上Point3d( ), plot3d( )的兩個例子都是利用一維數據

3D繪圖函數-2D數據

函數說明imshow( )將二維數組可視化為一張圖像surt( )將二維數組可視化為一個平面,Z軸描述了數組點的高度contour_surt( )將二維數組可視化等高線,高度值由數組點的值來確認mesh( )繪制由三個二維數組x,y,z描述坐標點的網絡平面barchart( )根據二維,三維或者點雲數據繪制 三維柱狀圖triangular_mesh( )繪制由x,y,z坐標點的三角網格面

imshow( )應用舉例

imshow( )所包含的參數:color,colotmap,extent,figure,interpolate,line_width, name, opacity, reset_zoom, transparent, vmax, vmin.
interpolate:圖像中的像素是否被插值,該值為布爾型,默認為True

給出如下代碼:

import numpy
from mayavi import mlab
#建立數據
s = numpy.random.random((10,10))
#對數據進行可視化
#'gist_earth'所謂地圖顏色
img = mlab.imshow(s, colormap = 'gist_earth')
mlab.show()

改變實體顏色

給出以下代碼——可對顯示物體外觀(顏色,透明度)的方式作出調整:

import numpy as np
from mayavi import mlab
#建立數據
x, y = np.mgrid[-10:10:200j, -10:10:200j]
z = 100 * np.sin(x * y) / (x * y)
# 對數據進行可視化
#控制背景顏色bgcolor
mlab.figure(bgcolor=(1, 1, 1))
surf = mlab.surf(z, colormap='cool')
#訪問surf對象的LUT
#LUT是一個255x4的數組,列向量表示RGBA,每個值范圍是0-255
#而LUT最後一列應該是控制透明度的參數,即可看出我們只是修改了最後一列的數值
lut=surf.module_manager.scalar_lut_manager.lut.table.to_array()
lut[:,-1]=np.linspace(0,255,256)
#增加透明梯度,修改alpha通道
surf.module_manager.scalar_lut_manager.lut.table=lut
# 更新視圖並顯示出來
mlab.show()

5.2 mlab函數

mlab控制函數

函數名稱說明clf清空當前圖像mlab.clf(figure = None)close關閉圖像窗口 mlab.close(scene = None, all=False)draw重新繪制當前圖像 mlab.close(figure = None)figure建立一個新的Scene或訪問一個存在的Scene,mlab.figure(figure = None, bgcolor = None,engine = None, size = (400,350))gcf返回當前圖像的handle mlab.gcf(figure = None)savefig存儲當前的前景,輸出一個文件,如png,jpg,bmp,tiff,pdf,obj,vrml等

圖像裝飾函數

函數名稱說明colorbar為對象的顏色映射增加顏色條,mlab.colorbar(object=None, title=None, orientation=None, nb_labels=None, nb_colors=None, label_fmt=Nonescalarbar為對象的標量顏色映射增加顏色條vectorbar為對象的標量顏色增加顏色條xlabel建立x坐標軸,並添加x軸坐標ylabel建立y坐標軸,並添加y軸坐標zlaybel建立z坐標軸,並添加z軸坐標

相機控制函數

函數名稱說明move移動相機和焦點 mlab.move(forward=None, right=None, up=None)pitch沿著向‘右’軸旋轉角度 mlab.pitch(degress)roll設置/獲取相機沿向前軸旋轉一定角度 mlab.roll(roll=None, figure=None)view設置/獲取當前視圖中相機的視點 mlab.view(azimuth=None, elevation=None, distance=None, focalpoint=None, roll=None, reset_roll=True, figure=None)yaw沿著‘向上’軸旋轉一定角度,mlab.yaw(degrees)

其它控制函數

函數名稱說明animate動畫控制函數mlab.anmate(fun=None, delay=500, ui=True)axes為當前物體設置坐標軸 mlab.axes(*args, **kwargs)outline為當前物體設置外輪廓 mlab.outline(*args, **kwargs)show為當前圖像開始交互 mlab.show(func=None, stop=False)show_pipline顯示mayavi的管線對話框,可一進行場景屬性的設置和編輯text為圖像添加文本 mlab.text(*args, **kwargs)title為繪制圖像建立標題 mlab.title(*args, **kwargs)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved