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

时间:2010-09-28 08:15:16

标签: python matplotlib

我刚刚安装了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'

6 个答案:

答案 0 :(得分:92)

首先,我认为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,而不仅仅是{{1}}。

答案 1 :(得分:51)

只是为了添加Joe Kington的答案(评论的声誉不够),在http://matplotlib.org/examples/mplot3d/mixed_subplots_demo.html的文档中混合2d和3d图是一个很好的例子,它显示了投影=&#39; 3D&#39;与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版检查)

答案 2 :(得分:1)

我遇到了同样的问题,@ Joe Kington和@bvanlew的回答解决了我的问题。

但是当您使用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')

效果很好!

答案 3 :(得分:1)

整个导入mplot3d以使用“ projection ='3d'”。

在脚本顶部插入以下命令。它应该运行正常。

from mpl_toolkits import mplot3d

答案 4 :(得分:1)

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

from mpl_toolkits.mplot3d import Axes3D

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

答案 5 :(得分:0)

尝试一下:

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)