2011-01-07 25 views
47

estaba navegación web sin éxito una solución para la siguiente pregunta simple:Trazado de polígonos en 3D pitón-matplotlib


cómo dibujar polígonos en 3D (por ejemplo un rectángulo o triángulo relleno) utilizando valores vértices? He probado muchas ideas, pero todos fallaron, consulte:

from mpl_toolkits.mplot3d import Axes3D 
from matplotlib.collections import PolyCollection 
import matplotlib.pyplot as plt 
fig = plt.figure() 
ax = Axes3D(fig) 
x = [0,1,1,0] 
y = [0,0,1,1] 
z = [0,1,0,1] 
verts = [zip(x, y,z)] 
ax.add_collection3d(PolyCollection(verts),zs=z) 
plt.show() 

Agradezco de antemano cualquier idea/comentarios.

actualizaciones en función de la respuesta aceptada:

import mpl_toolkits.mplot3d as a3 
import matplotlib.colors as colors 
import pylab as pl 
import scipy as sp 

ax = a3.Axes3D(pl.figure()) 
for i in range(10000): 
    vtx = sp.rand(3,3) 
    tri = a3.art3d.Poly3DCollection([vtx]) 
    tri.set_color(colors.rgb2hex(sp.rand(3))) 
    tri.set_edgecolor('k') 
    ax.add_collection3d(tri) 
pl.show() 

aquí está el resultado: enter image description here

+1

¿Cómo se puede actualizar esta solución para Python 3.5? Esta versión me da el error de que 'TypeError: objeto de tipo 'zip' no tiene len()' – jlt199

+1

@ jlt199 Simplemente use '[list (zip (...))]' o si usa numpy> 1.10 '[np. stack ([X, Y, Z], axis = 1)] 'o' [np.stack ([X, Y, Z], axis = 1)] ' – Y0da

Respuesta

43

Creo que casi lo tienes. ¿Es esto lo que quieres?

from mpl_toolkits.mplot3d import Axes3D 
from mpl_toolkits.mplot3d.art3d import Poly3DCollection 
import matplotlib.pyplot as plt 
fig = plt.figure() 
ax = Axes3D(fig) 
x = [0,1,1,0] 
y = [0,0,1,1] 
z = [0,1,0,1] 
verts = [zip(x, y,z)] 
ax.add_collection3d(Poly3DCollection(verts)) 
plt.show() 

alt text Usted también puede estar interesado en art3d.pathpatch_2d_to_3d.

+0

Sinceramente muchas gracias. Esa es exactamente mi respuesta. En realidad, necesito simular planos de fractura en 3D. Entonces fue la forma básica. Debería ser fácil para mí trabajar con miles de coordenadas realistas. Te agradezco nuevamente por tu gran ayuda. Fristal – Developer

+0

¿Cómo hacer que no esté cerrado? – Dims

Cuestiones relacionadas