파이썬에 의한 과학·기술 계산] mayavi를 이용한 3차원 등가면과 그 단면도의 묘화, 가시화

소개



과학·기술 계산을 구사하는 연구에서 스칼라 함수의 등가면을 조사하는 것이 종종 있다.
이것을 matplotlib 이용에 의한 표준 플롯만으로 하는 것은 쉽지 않다고 생각된다(어쩌면 현시점에서는 불가능한가).

한편, mayavi를 사용하면 손쉽게 등가면을 그릴 수 있다. mayavi는 프레젠테이션, 학회 발표, 논문에 사용할 수 있는 우수한 3차원 시각화 라이브러리로 알려져 있다(같다)[1].

여기에서는 mayavi를 이용한 등가면의 묘화의 예로서, 3 변수 함수 $f(x,y,z)=\frac{\sin(xyz)}{(xyz)}\tag 1$의 등가면 를 그려보자[1,2].

mayavi의 공식 사이트에 많은 정보가 게재되고 있어 본 기사도 거기에 준하고 있다.

덧붙여 저는 miyavi를 거의 사용한 적이 없기 때문에 잘못된 설명을 하고 있는 부분이 있을지도 모릅니다. 그 경우는 그 부분을 지적해 주시면 감사하겠습니다. .

내용



(1) f의 가능한 값을 4등분한 4개의 등가면을 그린다.

(2) 등가면의 단면을 그린다.

코드(1) 등가면 그리기



"""
mayaviを用いて3D等値面を描く: iso-surface
30 Aug. 2017
"""
import numpy as np
from mayavi import mlab
mlab.init_notebook()  # ノートブックの初期化。必ず入れること。

x, y, z = np.ogrid[-5:5:64j, -5:5:64j, -5:5:64j]
scalar = np.sin(x*y*z)/(x*y*z)  # 関数の設定

#描画領域の生成
mlab.figure(1, bgcolor=(1, 1, 1), fgcolor=(0, 0, 0), size=(600, 400)) # 背景色,サイズ等を設定
mlab.clf()

#3D等値面を描く。colormapをjetと設定,contoursが分割数, line_widthが線の太さ, opacityが不透明度(デフォルトは1.0)
obj=mlab.contour3d(scalar,colormap='jet',\
                   contours=4,line_width=1.3,opacity=0.8) 

mlab.show()

obj   #最後に描画オブジェクトを実行すること!これをしないと何もおこらない。

결과





코드 (2) 등가면의 단면을 그립니다.


"""
mayaviを用いて3D等値面の断面を描く: 
"""
import numpy as np
from mayavi import mlab
mlab.init_notebook()

x, y, z = np.ogrid[-5:5:64j, -5:5:64j, -5:5:64j]
scalar = np.sin(x*y*z)/(x*y*z)

#断面の設定: x軸とy軸とに平行な断面のオブジェクトをss1とss2という名前で作る
ss1=mlab.pipeline.image_plane_widget(mlab.pipeline.scalar_field(scalar),plane_orientation='x_axes',slice_index=10,)
ss2=mlab.pipeline.image_plane_widget(mlab.pipeline.scalar_field(scalar),plane_orientation='y_axes',slice_index=10,)

mlab.show()

ss1
ss2


결과 (2) : 등가 평면의 단면도





부록:



(1) conda를 이용한 mayavi 설치 ([3] 참조)



필자의 기계 환경: macOS Sierra 10.12.6
터미널을 시작하고,
  • conda install -c menpo mayavi=4.5.0
  • jupyter nbextension install --py mayavi --user
  • conda install pyQT

  • 했다.

    (2) macOS + Jupyter 이용시



    Jupyter-notebook 5.0 이상을 기동할 때는, iopub_data_rate_limit를 크게 설정해 두지 않으면, mayavi를 이용한 묘화에 필요한 메모리가 부족해진다.
    그래서, jupyter 기동시에, jupyter-notebook --NotebookApp.iopub_data_rate_limit=10000000000등으로 할 필요가 있는 것 같다[4].

    참고문헌



    [1] miyavi 튜토리얼 (영어): htp // // cs. 엔테오 ght. 코 m/마야ゔぃ/마야ゔぃ/아우토/mぁb_에lぺr_훙 c치온 s. HTML
    [2] contour3d 소개 (영어) htp://mdns. 그래. 에 s/2017/06/17/안녕 r3d/

    [3] 2dod 님의 Qiita 기사, Jupyter notebook에서 Mayavi를 사용할 때 설정
    [4] iopub_data_rate_limit에 관한 일 : htps : // 기주 b. 코 m / 쥬 py r / 노보보 k / 이스에 s / 2287

    좋은 웹페이지 즐겨찾기