Matplotlib: error de “proyección desconocida ‘3d’”

Acabo de instalar matplotlib y estoy intentando ejecutar uno de los scripts de ejemplo. Sin embargo me encuentro con el error detallado 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 "", line 245, in run_nodebug File "", line 5, in  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' 

En primer lugar, creo que mplot3D funcionó de forma un poco diferente en la versión 0.99 de matplotlib 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á ejecutando la versión 0.99 , en cuyo caso deberá usar una syntax 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 argumento de palabra clave de projection :

 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 también debería funcionar en matplotlib 1.0.x , no solo 0.99 .

Solo para agregar a la respuesta de Joe Kington (no hay suficiente reputación para un comentario) hay un buen ejemplo de cómo mezclar gráficos 2d y 3d en la documentación en http://matplotlib.org/examples/mplot3d/mixed_subplots_demo.html que muestra projection = ‘ 3d ‘trabajando en combinación con la importación de 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. (verificada con matplotlib versión 1.3.1)

Encuentro el mismo problema, y ​​la respuesta de @Joe Kington y @ bvanlew resuelve mi problema.

pero debo agregar más información cuando uses pycharm y habilites auto import .

cuando formatee 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!