不規則なデータのサーフェスの例

不規則に取得されたデータからサーフェスをプロットする方法を示す例.

パラメータ 'z' の変動を他の二つのパラメータ( 'x' と 'y' )の関数として与えるデータは,しばしば,基礎となる関数を視覚化するために表面を使用して, carpet plot としてプロットされます.データがパラメータ 'x' と 'y' の通常のグリッドで取得された時, mlab.surf 関数で見ることができます.ただし,欠落したポイントがある場合や,ランダムにデータを取得した場合は,surf関数を使用できません.

この問題は,接続情報が指定されていない場合,3次元に配置されたポイントはサーフェスを定義しないという事実に起因します.surf関数を使用すると,この情報は入力配列の形状から暗示されます.

この例では, (x, y) 面でランダムに配置された点がZ軸の面に埋め込まれています.まず, mlab.points3d を使用して点を視覚化します.次に,delaunay2dフィルタを用いて,最も近いマッチングによりメッシュを抽出し,表面モジュールを用いてそれを可視化しました.

../_images/example_surface_from_irregular_data.jpg

Pythonソースコード: surface_from_irregular_data.py

# Author: Gael Varoquaux <gael.varoquaux@normalesup.org>
# Copyright (c) 2009, Enthought, Inc.
# License: BSD Style.

import numpy as np

# Create data with x and y random in the [-2, 2] segment, and z a
# Gaussian function of x and y.
np.random.seed(12345)
x = 4 * (np.random.random(500) - 0.5)
y = 4 * (np.random.random(500) - 0.5)


def f(x, y):
    return np.exp(-(x ** 2 + y ** 2))

z = f(x, y)

from mayavi import mlab
mlab.figure(1, fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))

# Visualize the points
pts = mlab.points3d(x, y, z, z, scale_mode='none', scale_factor=0.2)

# Create and visualize the mesh
mesh = mlab.pipeline.delaunay2d(pts)
surf = mlab.pipeline.surface(mesh)

mlab.view(47, 57, 8.2, (0.1, 0.15, 0.14))
mlab.show()