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'
121279 次浏览

首先,我认为 mplot3Dmatplotlib版本 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

为了补充 Joe Kington 的回答(没有足够的声誉来做评论) ,在 http://matplotlib.org/examples/mplot3d/mixed_subplots_demo.html的文档中有一个混合2d 和3d 图形的好例子,它显示了投影 =’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进行检查)

我遇到了同样的问题,乔 · 金顿和布万卢的回答解决了我的问题。

但我应该添加更多的信息,当您使用 pycharm 并启用 auto import

当您格式化代码时,代码 from mpl_toolkits.mplot3d import Axes3D将通过 pycharm 自动删除。

所以,我的解决办法是

from mpl_toolkits.mplot3d import Axes3D
Axes3D = Axes3D  # pycharm auto import
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

而且效果很好!

试试这个:

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)

导入 mplot3d whole 使用“ project=’3d’”。

将下面的命令插入到脚本的顶部。它应该可以正常运行。

from mpl_toolkits import mplot3d

正如其他评论中建议的那样,我发现导入“ axes3d”解决了这个问题:

from mpl_toolkits.mplot3d import Axes3D

如果使用旧版本的 matplotlib.pyplot,似乎需要这样做