就中國慕課mooc/科學計算三維可視化課中對遇到的題目進行記錄,是鄙人自己所使用的代碼。記錄本人的學習日志,若有纰漏之處,希望各位看官加以斧正。
給出如下代碼:
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()
得到窗口:
鍵盤鼠標對場景進行操作:自己可摸索
Engine:建立和銷毀Scenes
Scenes:多個數據集合Sources
Filters:對數據進行交換
Module Manager:控制顏色;Colors and Legends
Modules:最終數據的表示,如線條,平面
管線中的對象
程序配置屬性的步驟
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()
給出如下代碼:
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(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
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( )的兩個例子都是利用一維數據
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()