2010-09-28 176 views
65

我剛剛安裝了matplotlib,並試圖運行其中的一個示例腳本。不過,我遇到了下面詳述的錯誤。我究竟做錯了什麼?Matplotlib:「Unknown projection'3d'」error

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' 
+2

看看這個主題:http://comments.gmane.org/gmane.comp.python.matplotlib.devel/8904 – 2010-09-28 08:20:57

+0

它適用於我。 Windows XP,Active狀態python 2.6.5 matplotlib 1.0.0。 – joaquin 2010-09-28 09:15:01

+0

你使用的是什麼版本的Python? – 2017-09-05 21:04:17

回答

71

首先,我認爲mplot3D在matplotlib版本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() 

這應該在matplotlib 1.0.x的工作,還有,不只是0.99。

+0

我正在運行版本0.99.3。我試過你的腳本,但它一直告訴我axes3d沒有定義。 – rectangletangle 2010-09-29 02:43:07

+0

@Anteater - 對不起,我沒有注意到你正在使用'axes3d'的測試數據。它現在應該被修復......這會教會我在不嘗試運行的情況下放入代碼! – 2010-09-30 19:20:51

+0

剛剛嘗試過,效果很好,感謝您的更新! – rectangletangle 2010-10-02 10:28:53

31

只是添加到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') 

13759的OP也有效。 (使用matplotlib版本1.3.1進行檢查)

+3

這實際上對於瞭解真的很有幫助!儘管Axes3D導入從未明確使用過,但它使得projection ='3d'可以無誤地使用。 – stoves 2016-08-03 14:04:27

+2

導入語句使它適用於我。但是我通過運行這段代碼不禁感到噁心......使用導入語句來引導一些看起來完全分離的代碼看起來像是一個糟糕的設計 – Ezbob 2017-01-18 16:43:58

+1

'ax = fig.gca(projection ='3d')'爲我工作。而不是'ax = plt.subplot(111,projection =「3d」)'。我正在使用'2.1.0'的版本 – 2017-10-13 02:16:05

相關問題