Python: mplot3d, grafica di una solida
-
25-09-2019 - |
Domanda
Sto cercando di rappresentare graficamente una wireframe solido di rivoluzione. Sto seguendo l'esempio per una sfera qui ma io sono un po 'in perdita. Ho semplificato tutto giù, ma ora sto bloccato su un errore. Sto anche guardando gli argomenti della funzione descritta qui , ma a meno che io sono incomprensione qualcosa, questo codice dovrebbe essere a posto. Mi rendo conto che quello che sto cercando di disegnare qui è una linea e non una forma, ma non capisco perché non posso usare questo metodo per disegnare comunque. Sto cercando di ottenere questo esempio più semplice possibile in modo da poter passare a rappresentare graficamente un solido reale. Eccolo:
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()
Ecco l'errore:
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'
Soluzione
Quando matplotlib scrive argomenti dati in lettere maiuscole, questo significa che è in attesa di matrici di dati. È possibile utilizzare la funzione meshgrid
(vedi la esempio per mplot3d
) per generare la griglia.
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)
Si noti che l'esempio che hai dato, i punti di maglia per la sfera sono costruiti utilizzando un .