【问题标题】:Matplotlib: "Unknown projection '3d'" errorMatplotlib:“未知投影'3d'”错误
【发布时间】:2011-04-18 04:10:19
【问题描述】:

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

【问题讨论】:

标签: python matplotlib


【解决方案1】:

按照其他 cmets 的建议,我发现导入“axes3d”解决了这个问题:

from mpl_toolkits.mplot3d import Axes3D

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

【讨论】:

    【解决方案2】:

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

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

    从 mpl_toolkits 导入 mplot3d

    【讨论】:

      【解决方案3】:

      试试这个:

      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)
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • @dashesy - 您仍然需要导入 3d 投影:from mpl_toolkits.mplot3d import Axes3D。之后,它应该可以工作了。
        • 啊哈,有趣!在示例中看到它,但猜测它仅适用于旧版本。谢谢
        • python 3 打印版本的命令是python -c 'import matplotlib; print(matplotlib.__version__)'
        • 版本2.0.2怎么样?
        • 我对 python 2.7 有这个错误,matplotlib.__version__ '2.2.3' .....因为我没有使用from mpl_toolkits.mplot3d import Axes3D... :)
        【解决方案5】:

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

        而且效果很好!

        【讨论】:

        • 也可以在导入前加上# noinspection PyUnresolvedReferences
        【解决方案6】:

        只是为了补充 Joe Kington 的回答(评论的声誉不够),http://matplotlib.org/examples/mplot3d/mixed_subplots_demo.html 的文档中有一个混合 2d 和 3d 绘图的好例子,它显示了 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)

        【讨论】:

        • 这实际上真的很有帮助!虽然从未明确使用 Axes3D 导入,但它使 projection='3d' 可以正确使用
        • 导入语句使它对我有用。但是运行这段代码让我忍不住感到恶心......使用导入语句引导一些表面上看起来完全分离的代码似乎是一个糟糕的设计
        • ax = fig.gca(projection='3d') 对我有用。而不是ax = plt.subplot(111,projection="3d")。我使用的是2.1.0的版本
        • @Ezbob 整个 matplotlib API 简直让人头疼。如果我想创建一个基本的情节,我总是必须用谷歌搜索。没有其他 python 库有这么糟糕的 API
        猜你喜欢
        • 2019-10-06
        • 1970-01-01
        • 2019-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-07
        • 1970-01-01
        相关资源
        最近更新 更多