Matplotlib:“未知投影”3d“”错误

我刚刚安装了matplotlib,并试图运行其中的一个示例脚本。 但是我遇到了下面详细的错误。 我究竟做错了什么?

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

错误是

 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' 

首先,我认为mplot3D在matplotlib版本0.99中的工作方式与在当前版本的matplotlib中有所不同。

你正在使用哪个版本? (试试运行: python -c 'import matplotlib; print matplotlib.__version__'

我猜你正在运行0.99版本,在这种情况下,你需要使用稍微不同的语法,或更新到更新版本的matplotlib。

如果您运行的是0.99版本,请尝试执行此操作,而不是使用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() 

这应该在matplotlib 1.0.x,也不只是0.99。

只是添加到乔·金顿的答案(没有足够的评论声望),有一个很好的例子,在http://matplotlib.org/examples/mplot3d/mixed_subplots_demo.html的文档中混合二维和三维图,它显示投影= 3d“与Axes3D导入结合使用。

 from mpl_toolkits.mplot3d import Axes3D ... ax = fig.add_subplot(2, 1, 1) ... ax = fig.add_subplot(2, 1, 2, projection='3d') 

实际上只要Axes3D导入存在就行

 from mpl_toolkits.mplot3d import Axes3D ... ax = fig.gca(projection='3d') 

正如OP所使用的也是有效的。 (使用matplotlib版本1.3.1进行检查)