Matplotlib:“未知投影‘3d’”

2024-04-19 16:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: inpygetmatplotliblibpackageslinesite
3条回答

首先,我认为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()

这应该在matplotlib1.0.x中有效,而不仅仅是0.99

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

在脚本顶部插入下面的命令。它应该运行良好。

from mpl_toolkits import mplot3d

除了Joe Kington的回答(没有足够的声誉发表评论)之外,在http://matplotlib.org/examples/mplot3d/mixed_subplots_demo.html的文档中有一个很好的例子,显示了projection='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一起检查)

相关问题 更多 >