Matplotlib : "알 수없는 투영 '3d'"오류


130

방금 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'


그것은 나를 위해 완벽하게 작동합니다. Windows XP, 활성 상태 Python 2.6.5 matplotlib 1.0.0.
joaquin

어떤 버전의 파이썬을 사용하고 있습니까?
Charlie Parker

답변:


114

첫째로, 나는 생각 mplot3D에 약간 다르게 작동 matplotlib버전 0.99은 현재 버전에서보다 matplotlib.

어떤 버전을 사용하고 있습니까? (달려보십시오 :python -c 'import matplotlib; print matplotlib."__version__")

버전을 실행 중이라고 생각합니다.이 0.99경우 약간 다른 구문을 사용하거나 최신 버전으로 업데이트해야합니다 matplotlib.

version을 실행중인 경우 keyword 인수 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.


47
@dashesy-여전히 3D 투영을 가져와야합니다 from mpl_toolkits.mplot3d import Axes3D. 나중에 작동합니다.
Joe Kington

2
아하, 재미있는! 예제에서 보았지만 이전 버전 전용이라고 생각했습니다. 감사
대시

2
파이썬 3의 인쇄 버전의 명령은python -c 'import matplotlib; print(matplotlib.__version__)'
찰리 파커 (Charlie Parker)

2
버전은 2.0.2어떻습니까?
Charlie Parker

1
파이썬 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
수입 명세서는 나를 위해 일하게했다. 하지만이 코드를 실행하여 icky를 느낄 수는 없습니다 ... import 문을 사용하여 표면에서 완전히 분리 된 것처럼 보이는 일부 코드를 부트 스트랩하면 디자인이 나쁜 것 같습니다
Ezbob

2
ax = fig.gca(projection='3d')나를 위해 작동합니다. 대신에 ax = plt.subplot(111,projection="3d"). 저는 2.1.0
Johnny Zhang

2
@Ezbob 전체 matplotlib API는 엉덩이에 고통입니다. 기본 줄거리를 만들려면 항상 Google에 접속해야합니다. 다른 파이썬 라이브러리에는 그런 엉뚱한 API가 없습니다
Simon H

13

"projection = '3d'"를 사용하려면 mplot3d 전체를 가져옵니다.

스크립트 상단에 아래 명령을 삽입하십시오. 잘 작동합니다.

mpl_toolkits에서 가져 오기 mplot3d

4

나는 같은 문제가 발생하고 @Joe Kington과 @bvanlew의 대답이 내 문제를 해결합니다.

pycharm 및 enable 사용하면 더 많은 정보를 추가해야합니다 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가져 오기 전에 넣을 수도 있습니다 .
Michael Bikovitsky

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.