Pergunta

Estou tentando representar graficamente um quadro de arame sólido de revolução. Estou seguindo o exemplo para uma esfera aqui Mas estou um pouco perdido. Simplifiquei tudo, mas agora estou preso a um erro. Também estou olhando para os argumentos da função descritos aqui, mas, a menos que eu esteja entendendo mal algo, esse código deve estar bem. Percebo que o que estou tentando desenhar aqui é uma linha e não uma forma, mas não entendo por que não posso usar esse método para desenhá -lo de qualquer maneira. Estou tentando obter este exemplo o mais simples possível para que eu possa passar a representar um gráfica de um sólido real. Aqui está:

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()

Aqui está o erro:

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'
Foi útil?

Solução

Quando o Matplotlib grava argumentos de dados em letras maiúsculas, isso significa que está esperando matrizes de dados. Você pode usar o meshgrid função (veja o exemplo para mplot3d) para gerar a grade.

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)

Observe que, no exemplo que você deu, os pontos de malha para a esfera são construídos usando um Produto externo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top