2012-07-10 3 views
7

J'ai un tableau numpy 2D et je veux le tracer en 3D. J'ai entendu parler de mplot3d mais je ne peux pas commencer à travailler correctementTracer un tableau 2d avec mplot3d

Voici un exemple de ce que je veux faire. J'ai un tableau avec les dimensions (256,1024). Il doit tracer un graphe 3D où l'axe x est de 0 à 256 l'axe y de 0 à 1024 et l'axe z du graphique affiche la valeur du tableau à chaque entrée.

Comment procéder?

Répondre

0

Vous pouvez trouver la réponse dans l'un des exemples du Matplotlib gallery; les exemples 3D sont vers la fin. Plus généralement, la galerie Matplotlib est une excellente ressource de premier ordre, pour trouver comment faire quelques parcelles.

Les exemples que j'ai examinés fonctionnent essentiellement avec trois tableaux 2D: un avec toutes les valeurs x, un avec toutes les valeurs y, et le dernier avec toutes les valeurs z. Ainsi, une solution consiste à créer les tableaux de valeurs x et y (avec meshgrid(), par exemple). .

10

On dirait que vous essayez de créer un terrain surface (sinon, vous pouvez dessiner une parcelle wireframe ou un filled countour plot

De l'information contenue dans la question, vous pouvez essayer quelque chose le long des lignes 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() 

Il est évident que vous devez choisir des données plus sensibles que d'utiliser numpy.random afin d'obtenir une surface raisonnable.

+0

merci pour votre réponse;) Peut-être que je suis un peu stupide mais je ne sais pas vraiment comment obtenir mon tableau 2D en deux tableaux 2D et une liste: o – Fourier

+0

Je l'ai fait pour vous: 'x, y = range (nx), range (ny) 'va créer des listes 1D de valeurs x et y et la ligne' X, Y = numpy.meshgrid (x, y) 'convertit ces listes en tableaux NumPy 2D (NumPy doit être installé pour que Matplotlib fonctionne, vous l'avez déjà sur votre système). Si vous avez d'autres questions, vous pouvez peut-être modifier votre question pour fournir plus d'informations, par exemple, pour inclure les données que vous essayez de tracer. – Chris

+1

Votre tableau 2D est simplement appelé 'data', dans le code ci-dessus, et sa taille est appelée' nx', 'ny'. J'espère que cela peut vous aider à avancer. – EOL

0

vous pouvez également utiliser oct2py module qui est en fait un pont python-octave. En l'utilisant, vous pouvez exploiter des fucntions d'octave, et vous pouvez obtenir ce dont vous avez besoin, et c'est aussi très facile.

vérifier cette documentation: https://www.gnu.org/software/octave/doc/v4.0.1/Three_002dDimensional-Plots.html

Et par exemple échantillon:

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) 

ci-dessus est le code python, qui est le même que le premier exemple mis en œuvre en octave dans la documentation ci-dessus.