2014-01-10 26 views
5

Ich versuche, einige experimentelle Daten zu plotten, und ich bin mit einem Problem mit der Triangulation konfrontiert, wie ausführlicher erklärt here. Ich finde heraus, dass die Lösung darin bestehen könnte, das Gitter von einer xy zu xz zu ändern und das y als Elevation zu verwenden.Mayavi Delaunay-Triangulation mit XZ-Daten anstelle von XY-Daten

Wie auch immer ich habe keine Informationen über eine solche Möglichkeit. Also gibt es eine Möglichkeit, dies zu tun, vielleicht durch Verwendung einiger Masken oder einiger Filter, um einfach die y- und z-Spalten für die Triangulation zu invertieren?

Hier ist ein Grundcode:

import numpy 
from mayavi import mlab 

X2 = numpy.array([0, 0, 1, 1]) 
Y2 = numpy.array([0.5, 0.45, 1, 0.5]) 
Z2 = numpy.array([0, 1, 0.5,0]) 

fig = mlab.figure(1, bgcolor=(1, 1, 1), fgcolor=(0.5, 0.5, 0.5)) 
# Define the points in 3D space 
# including color code based on Z coordinate. 
pts = mlab.points3d(X2, Y2, Z2, Y2, colormap='jet') 
# Triangulate based on X, Y with Delaunay 2D algorithm. 
# Save resulting triangulation. 
mesh = mlab.pipeline.delaunay2d(pts) 
# Remove the point representation from the plot 
pts.remove() 
# Draw a surface based on the triangulation 
surf = mlab.pipeline.surface(mesh, colormap='jet') 

# Simple plot. 
mlab.outline(extent=(0,1,0,1,0,1)) 
mlab.axes(extent=(0,1,0,1,0,1)) 
mlab.show() 

Antwort

1

Sie SciPy des Delaunay-Algorithmus zu sein, unabhängig von der Reihenfolge Ihrer Daten nutzen könnten. triangular_mesh() können Sie einen Skalar für eine Colormap angeben:

import numpy as np 
from scipy.spatial import Delaunay 
from mayavi import mlab 

X2 = np.array([0, 0, 1, 1]) 
Y2 = np.array([0.5, 0.45, 1, 0.5]) 
Z2 = np.array([0, 1, 0.5,0]) 

# use scipy for delaunay: 
p2d = np.vstack([X2,Y2]).T 
d2d = Delaunay(p2d) 

fig = mlab.figure(1, bgcolor=(1, 0.7, 1), fgcolor=(0.5, 0.5, 0.5)) 

# Generate triangular Mesh: 
tmesh = mlab.triangular_mesh(X2, Y2, Z2, d2d.vertices, 
          scalars=Y2, colormap='jet') 

# Simple plot. 
mlab.outline(extent=(0,1,0,1,0,1)) 
mlab.axes(extent=(0,1,0,1,0,1)) 
mlab.show()