Dibuje una superficie 3D de {x, y, z} -después de datos en python

Estoy tratando de trazar una superficie 3D construida para ajustarse a algunos puntos {x, y, z} en python, idealmente algo como la función Mathematica ListSurfacePlot3D . Hasta ahora he intentado plot_surface y plot_wireframe en mis puntos en vano.

Solo los ejes se renderizan con plot_surface . plot_wireframe da un montón de squigglys, vagamente en la forma del objeto, pero no el tipo agradable que se muestra en la documentación: introduzca la descripción de la imagen aquí Compare con el resultado de ListSurfacePlot3D : introduzca la descripción de la imagen aquí

Aquí hay un ejemplo de trabajo mínimo, usando un archivo test.csv que publiqué aquí :

 import csv from matplotlib import pyplot import pylab from mpl_toolkits.mplot3d import Axes3D hFile = open("test.csv", 'r') datfile = csv.reader(hFile) dat = [] for row in datfile: dat.append(map(float,row)) temp = zip(*(dat)) fig = pylab.figure(figsize=pyplot.figaspect(.96)) ax = Axes3D(fig) 

Entonces tambien

 ax.plot_surface(temp[0], temp[1], temp[2]) pyplot.show() 

o

 ax.plot_wireframe(temp[0], temp[1], temp[2]) pyplot.show() 

Así es como se representa usando plot_surface : introduzca la descripción de la imagen aquí y utilizando plot_wireframe : introduzca la descripción de la imagen aquí y usando ListSurfacePlot3D : introduzca la descripción de la imagen aquí

plot_surface espera plot_surface X, Y, Z en forma de matrices 2D, como lo devolvería np.meshgrid . Cuando las entradas están regularmente cuadriculadas de esta manera, la función de trazado sabe implícitamente qué vértices en la superficie están adyacentes entre sí y, por lo tanto, deben unirse con bordes. Sin embargo, en su ejemplo, le está dando vectores 1D de coordenadas, por lo que la función de trazado tendría que ser capaz de averiguar qué vértices deben unirse.

La función plot_trisurf maneja los puntos espaciados irregularmente haciendo una triangulación de Delaunay para determinar qué puntos deben unirse con los bordes de tal manera que se eviten los “triangularjs delgados”:

introduzca la descripción de la imagen aquí