matplotlib ValueError:未知投影“3d”

wpcxdonn  于 2023-05-01  发布在  其他
关注(0)|答案(6)|浏览(170)

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

ldioqlga1#

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

bt1cpqcv

bt1cpqcv2#

只是为了补充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)

w51jfk4q

w51jfk4q3#

完整导入mplot3d以使用“projection = '3d'"。
将下面的命令插入到脚本的顶部。应该没问题

from mpl_toolkits import mplot3d
7xllpg7q

7xllpg7q4#

我遇到了同样的问题,@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')

而且效果很好!

z9zf31ra

z9zf31ra5#

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

from mpl_toolkits.mplot3d import Axes3D

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

0lvr5msh

0lvr5msh6#

试试这个:

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)

相关问题