Python: mplot3d, gráficando um sólido
-
25-09-2019 - |
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'
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.