2010-12-10 36 views
2

J'essaie de tracer un solide filaire de révolution. Je suis l'exemple d'une sphère here mais je suis un peu perdu. J'ai tout simplifié, mais je suis maintenant coincé sur une erreur. Je regarde aussi les arguments de la fonction décrits here, mais à moins que je ne comprenne quelque chose, ce code devrait être correct. Je réalise que ce que j'essaie de dessiner ici est une ligne et non une forme, mais je ne comprends pas pourquoi je ne peux pas utiliser cette méthode pour la dessiner quand même. J'essaie d'obtenir cet exemple aussi simple que possible afin que je puisse passer à la représentation graphique d'un solide réel. Ici, il est:Python: mplot3d, représentant un solide

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plot 
import numpy 
import pylab 

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

n = numpy.linspace(0, 100) 

x = n 
y = x**2 
z = 1 
ax.plot_wireframe(x, y, z) 

plot.show() 

est ici l'erreur:

Traceback (most recent call last): 
    File "test.py", line 14, in <module> 
    ax.plot_wireframe(x, y, z) 
    File "/usr/lib/pymodules/python2.6/mpl_toolkits/mplot3d/axes3d.py", line 687, in plot_wireframe 
    rows, cols = Z.shape 
AttributeError: 'int' object has no attribute 'shape' 

Répondre

3

Lorsque matplotlib écrit des arguments de données en lettres majuscules, cela signifie qu'il est attendre des matrices de données. Vous pouvez utiliser la fonction meshgrid (voir le example for mplot3d) pour générer la grille.

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plot 
import numpy 
import pylab 

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

n = numpy.linspace(0, 100) 

x = n 
y = x**2 

X, Y = numpy.meshgrid(x, y) 
Z = numpy.ones_like(X) 

ax.plot_wireframe(X, Y, Z) 

Notez que dans l'exemple que vous avez donné, les points de maillage pour la sphère sont construits à l'aide d'un outer product.