Matplotlib:「不明な投影 '3d'」エラー


130

matplotlibをインストールし、サンプルスクリプトの1つを実行しようとしています。しかし、以下に詳述するエラーに遭遇します。何が悪いのですか?

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'


それは私にとって完璧に機能します。Windows XP、アクティブ状態のpython 2.6.5 matplotlib 1.0.0。
joaquin

どのバージョンのpythonを使用していますか?
チャーリーパーカー

回答:


114

まずmplot3Dmatplotlibバージョンの0.99動作がの現在のバージョンとは少し異なると思いますmatplotlib

どのバージョンを使用していますか?(実行してみてください:python -c 'import matplotlib; print matplotlib."__version__")

バージョンを実行0.99していると思いますが、その場合は少し異なる構文を使用するか、の最新バージョンに更新する必要がありますmatplotlib

versionを実行している場合は0.99projectionキーワード引数を使用する代わりに、次のようにしてください。

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です。


47
@dashesy-3dプロジェクションをインポートする必要がありますfrom mpl_toolkits.mplot3d import Axes3D。その後、動作するはずです。
Joe Kington 2013

2
あ、面白い!例で見ましたが、それは古いバージョンのみのものであると推測しました。ありがとう
dashesy

2
Python 3の印刷バージョンのコマンドはpython -c 'import matplotlib; print(matplotlib.__version__)'
Charlie Parker

2
バージョンは2.0.2どうですか?
チャーリーパーカー

1
私はpython 2.7、matplotlib .__ version__ '2.2.3'でこのエラーが発生しました.....使用していなかったため、from mpl_toolkits.mplot3d import Axes3D... :)
ntg

64

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で確認)


4
これは実際に知っておくと役に立ちます!Axes3Dインポートは明示的に使用されることはありませんが、projection = '3d'をエラーなしで使用できます
ストーブ

3
インポート文は私にとってそれを機能させました。しかし、このコードを実行しても気分が悪くなるのは避けられません...インポートステートメントを使用して、表面上で完全に分離されているように見えるいくつかのコードをブートストラップすることは悪いデザインのようです
Ezbob

2
ax = fig.gca(projection='3d')私のために働きます。の代わりにax = plt.subplot(111,projection="3d")。私はのバージョン使用しています2.1.0
ジョニー・チャン

2
@Ezbob matplotlib API全体は、お尻の痛みです。基本的なプロットまで作成したい場合は、常にグーグルする必要があります。他のpython libにはそのようなくだらないAPIはありません
Simon H

13

mplot3d全体をインポートして、「projection = '3d'」を使用します。

スクリプトの上に以下のコマンドを挿入します。それはうまく動くはずです。

mpl_toolkitsからmplot3dをインポート

4

私は同じ問題に遭遇し、@ 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インポートの前に置くこともできます。
マイケルビコビツキー

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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.