2012-07-10 25 views
7

Tengo una matriz numpy 2D y quiero trazarla en 3D. Escuché sobre mplot3d pero no puedo trabajar correctamenteTrazado de una 2da matriz con mplot3d

Aquí hay un ejemplo de lo que quiero hacer. Tengo una matriz con las dimensiones (256,1024). Debe graficar un gráfico 3D donde el eje x es de 0 a 256 el eje y de 0 a 1024 y el eje z del gráfico muestra el valor de la matriz en cada entrada.

¿Cómo puedo hacer esto?

Respuesta

0

Puede encontrar la respuesta en uno de los ejemplos de Matplotlib gallery; los ejemplos 3D están hacia el final.

Más en general, la galería Matplotlib es un excelente recurso de primera parada para encontrar cómo hacer algunas parcelas.

Los ejemplos que he visto funcionan esencialmente con tres matrices 2D: una con todos los valores x, uno con todos los valores y, y el último con todos los valores z. Entonces, una solución es crear las matrices de valores xey (por ejemplo, con meshgrid()). .

10

Parece que usted está tratando de crear una trama surface (otra posibilidad es dibujar un diagrama wireframe o una filled countour plot

partir de la información en la pregunta, usted podría intentar algo en la línea de:

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

# Set up grid and test data 
nx, ny = 256, 1024 
x = range(nx) 
y = range(ny) 

data = numpy.random.random((nx, ny)) 

hf = plt.figure() 
ha = hf.add_subplot(111, projection='3d') 

X, Y = numpy.meshgrid(x, y) # `plot_surface` expects `x` and `y` data to be 2D 
ha.plot_surface(X, Y, data) 

plt.show() 

Obviamente tiene que elegir los datos más sensible que el uso de numpy.random el fin de obtener una superficie razonable.

+0

gracias por su respuesta;) Tal vez soy un poco estúpido, pero realmente no sé cómo obtener mi matriz 2D en dos matrices en 2D y una lista: o – Fourier

+0

He hecho eso para usted: 'x, y = range (nx), range (ny) 'creará listas 1D de valores xey y la línea' X, Y = numpy.meshgrid (x, y) 'convierte estas listas en matrices 2D NumPy (NumPy debe estar instalado para que Matplotlib funcione, entonces ya tienes esto en tu sistema). Si tiene otra pregunta, quizás pueda editar su pregunta para proporcionar más información, por ejemplo, para incluir los datos que intenta trazar. – Chris

+1

Su matriz 2D simplemente se llama 'datos', en el código anterior, y su tamaño se llama' nx', 'ny'. Espero que esto te pueda ayudar. – EOL

0

también puede utilizar oct2py módulo que es en realidad un puente de python-octava. Al usarlo puedes explotar fucntions de octava, y puedes obtener lo que necesitas, y es bastante fácil también.

la salida de esta documentación: https://www.gnu.org/software/octave/doc/v4.0.1/Three_002dDimensional-Plots.html

Y por ejemplo la muestra:

from oct2py import octave as oc 

tx = ty = oc.linspace (-8, 8, 41) 
[xx, yy] = oc.meshgrid (tx, ty) 
r = oc.sqrt (xx * xx + yy * yy) + oc.eps() 
tz = oc.sin (r)/r 
oc.mesh (tx, ty, tz) 

anterior es el código Python, que es el mismo que el primer ejemplo implementado en octava en la documentación anterior.

Cuestiones relacionadas