2010-02-19 43 views
21

estoy usando matplotlib para hacer estoPython: cómo trazar gráficos en 3D con Python?

from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = Axes3D(fig) 

x = [6,3,6,9,12,24] 
y = [3,5,78,12,23,56] 

ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z') 

plt.show() 

Ahora bien, esto construye un gráfico que es horizontal en el espacio 3D. ¿Cómo hago que el gráfico sea vertical para que mire al usuario?

Lo que quiero hacer es construir varios de estos gráficos verticales que están separados por cierta distancia y se enfrentan al usuario.

+0

Piense en ello, ¿no es un poco tonto usar gráficos en 3D para trazar datos en 2D? – badp

+2

Estoy variando un parámetro particular alfa (no xey) y observando el cambio en el gráfico para los diversos valores de alfa – Bruce

Respuesta

11

de BP podría funcionar bien, pero hay una manera mucho más simple.

Su gráfica actual es 'plana' en el eje z, por eso es horizontal. Quieres que sea vertical, lo que significa que quieres que sea 'plano' en el eje y. Esto implica la modificación más mínimo a su código:

from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = Axes3D(fig) 

x = [6,3,6,9,12,24] 
y = [3,5,78,12,23,56] 
# put 0s on the y-axis, and put the y axis on the z-axis 
ax.plot(xs=x, ys=[0]*len(x), zs=y, zdir='z', label='ys=0, zdir=z') 
plt.show() 

A continuación, usted puede fácilmente tener múltiples tales gráficos mediante el uso de diferentes valores para el parámetro ys (por ejemplo, ys=[2]*len(x) lugar pondría la gráfica ligeramente por detrás).

3

De acuerdo con la documentación que desea utilizar el método ax.plot_surface(x,y,z). Más información y tipos de gráfico here.

El siguiente debería funcionar: respuesta

x = [1,2,3] 
y = [4,5,6] 
z = [7,8,9] 
data = zip(x,y,z) 

#map data on the plane 
X, Y = numpy.meshgrid(arange(0, max(x), 1), arange(0, max(y), 1)) 
Z = numpy.zeros((len(Y), len(X)), 'Float32') 
for x_,y_,z_ in data: 
    Z[x_, y_] = z_ #this should work, but only because x and y are integers 
       #and arange was done with a step of 1, starting from 0 
fig = p.figure() 
ax = p3.Axes3D(fig) 
ax.plot_surface(X, Y, Z) 
7

Mayavi, en particular el módulo mlab, proporciona un potente trazado 3D que funcionará en datos grandes o complejos, y debería ser fácil de usar en matrices numpy.

7

Puede establecer el ángulo de vista de la gráfica 3d con la función view_init(). El siguiente ejemplo es para la versión 1.1 de matplotlib.

from mpl_toolkits.mplot3d import axes3d 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

x = [6,3,6,9,12,24] 
y = [3,5,78,12,23,56] 

ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z') 
ax.view_init(90, -90) 
plt.show() 
Cuestiones relacionadas