rectánguloenredo
Acabo de instalar matplotlib y estoy tratando de ejecutar uno de los scripts de ejemplo. Sin embargo, me encuentro con el error que se detalla a continuación. ¿Qué estoy haciendo mal?
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
cset = ax.contour(X, Y, Z, 16, extend3d=True)
ax.clabel(cset, fontsize=9, inline=1)
plt.show()
el error es
Traceback (most recent call last):
File "<string>", line 245, in run_nodebug
File "<module1>", line 5, in <module>
File "C:\Python26\lib\site-packages\matplotlib\figure.py", line 945, in gca
return self.add_subplot(111, **kwargs)
File "C:\Python26\lib\site-packages\matplotlib\figure.py", line 677, in add_subplot
projection_class = get_projection_class(projection)
File "C:\Python26\lib\site-packages\matplotlib\projections\__init__.py", line 61, in get_projection_class
raise ValueError("Unknown projection '%s'" % projection)
ValueError: Unknown projection '3d'
jose kington
En primer lugar, creo mplot3D
funcionó un poco diferente en matplotlib
versión 0.99
que en la versión actual de matplotlib
.
¿Qué versión está utilizando? (Intente ejecutar: python -c 'import matplotlib; print matplotlib."__version__")
Supongo que estás ejecutando la versión 0.99
en cuyo caso deberá usar una sintaxis ligeramente diferente o actualizar a una versión más reciente de matplotlib
.
Si está ejecutando la versión 0.99
intente hacer esto en lugar de usar el projection
argumento de palabra clave:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d, Axes3D #<-- Note the capitalization!
fig = plt.figure()
ax = Axes3D(fig) #<-- Note the difference from your original code...
X, Y, Z = axes3d.get_test_data(0.05)
cset = ax.contour(X, Y, Z, 16, extend3d=True)
ax.clabel(cset, fontsize=9, inline=1)
plt.show()
Esto debería funcionar en matplotlib
1.0.x
también, no sólo 0.99
.
-
@dashesy: aún deberá importar las proyecciones en 3D:
from mpl_toolkits.mplot3d import Axes3D
. Después, debería funcionar.–Joe Kington
24 de abril de 2013 a las 2:46
-
jaja, interesante! lo vi en los ejemplos pero supuse que es solo para versiones anteriores. Gracias
– deslumbrante
24 de abril de 2013 a las 2:49
-
el comando para la versión impresa de python 3 es
python -c 'import matplotlib; print(matplotlib.__version__)'
–Charlie Parker
5 sep 2017 a las 21:06
-
¿Qué pasa con la versión?
2.0.2
?–Charlie Parker
5 sep 2017 a las 21:06
-
Tengo este error para python 2.7, matplotlib.__version__ ‘2.2.3’ ….. PORQUE no estaba usando
from mpl_toolkits.mplot3d import Axes3D
… 🙂– NTG
7 de enero de 2019 a las 16:49
Solo para agregar a la respuesta de Joe Kington (no hay suficiente reputación para un comentario), hay un buen ejemplo de mezclar tramas 2d y 3d en la documentación en http://matplotlib.org/examples/mplot3d/mixed_subplots_demo.html que muestra la proyección = ‘3d’ trabajando en combinación con la importación Axes3D.
from mpl_toolkits.mplot3d import Axes3D
...
ax = fig.add_subplot(2, 1, 1)
...
ax = fig.add_subplot(2, 1, 2, projection='3d')
De hecho, siempre que la importación de Axes3D esté presente, la línea
from mpl_toolkits.mplot3d import Axes3D
...
ax = fig.gca(projection='3d')
como lo usa el OP también funciona. (comprobado con matplotlib versión 1.3.1)
-
¡Esto es realmente muy útil saberlo! Si bien la importación Axes3D nunca se usa explícitamente, permite que se use la proyección = ‘3d’ sin error
– estufas
3 de agosto de 2016 a las 14:04
-
La declaración de importación hizo que funcionara para mí. Pero no puedo evitar sentirme molesto al ejecutar este código… Usar una declaración de importación para iniciar un código que parece totalmente separado en la superficie parece un mal diseño
– Ezbob
18 de enero de 2017 a las 16:43
-
ax = fig.gca(projection='3d')
funciona para mi En lugar deax = plt.subplot(111,projection="3d")
. Estoy usando la versión de2.1.0
– Juan
13 de octubre de 2017 a las 2:16
-
@Ezbob, toda la API de matplotlib es solo un dolor en el culo. Siempre tengo que buscar en Google si quiero crear incluso una trama básica. Ninguna otra biblioteca de Python tiene una API tan mala
– Simón Hessner
15 de abril de 2019 a las 21:46
Importe mplot3d completo para usar “proyección = ‘3d'”.
Inserte el siguiente comando en la parte superior de su secuencia de comandos. Debería funcionar bien.
from mpl_toolkits import mplot3d
Me encuentro con el mismo problema, y la respuesta de @Joe Kington y @bvanlew resuelve mi problema.
pero debería agregar más información cuando use pycharm y habilite auto import
.
cuando formateas el código, el código from mpl_toolkits.mplot3d import Axes3D
se eliminará automáticamente por pycharm.
Entonces, mi solución es
from mpl_toolkits.mplot3d import Axes3D
Axes3D = Axes3D # pycharm auto import
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
y funciona bien!
Como se recomienda en otros comentarios, descubrí que importar “axes3d” resolvió el problema:
from mpl_toolkits.mplot3d import Axes3D
Parece que esto es necesario si se usa una versión anterior de matplotlib.pyplot
vvvvv
Prueba esto:
import matplotlib.pyplot as plt
import seaborn as sns
from mpl_toolkits.mplot3d import axes3d
fig=plt.figure(figsize=(16,12.5))
ax=fig.add_subplot(2,2,1,projection="3d")
a=ax.scatter(Dataframe['bedrooms'],Dataframe['bathrooms'],Dataframe['floors'])
plt.plot(a)
Echa un vistazo a este hilo: comentarios.gmane.org/gmane.comp.python.matplotlib.devel/8904
– Manoj Govindan
28 de septiembre de 2010 a las 8:20
Funciona perfectamente para mí. Windows XP, estado activo python 2.6.5 matplotlib 1.0.0.
– joaquín
28 de septiembre de 2010 a las 9:15
¿Qué versión de python estás usando?
–Charlie Parker
5 sep 2017 a las 21:04
Usar from mpl_toolkits.mplot3d import Axes3D resolverá el problema
– HmT
28 de diciembre de 2021 a las 11:05