我正在尝试使用mplot3d。我使用Ubuntu(lucid)存储库安装了matibplot,它看起来很开箱即用。任何帮助将不胜感激。
这是我正在运行的代码:
from __future__ import division
from mpl_toolkits.mplot3d import Axes3D
from random import *
from scipy import *
import matplotlib.pyplot as plt
locA = mat([0,0,0])
locB = mat([2,0,0])
locC = mat([1,sqrt(3),0])
locD = mat([1,sqrt(3)/2,sqrt(3)])
startLoc = locA
points = startLoc
n = 10000
x = linspace(1,n,n)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for i in x:
j = randint(1,4)
if j < 2:
startLoc = (startLoc+locA)/2
points = concatenate((points,startLoc))
elif j < 3:
startLoc = (startLoc+locB)/2
points = concatenate((points,startLoc))
elif j < 4:
startLoc = (startLoc+locC)/2
points = concatenate((points,startLoc))
else:
startLoc = (startLoc+locD)/2
points = concatenate((points,startLoc))
ax.scatter(points[:,0],points[:,1],points[:,2])
plt.show()
这是我得到的错误:
Traceback (most recent call last):
File "triangle_random_3D.py", line 17, in <module>
ax = fig.add_subplot(111, projection='3d')
File "/usr/lib/pymodules/python2.6/matplotlib/figure.py", line 677, in add_subplot
projection_class = get_projection_class(projection)
File "/usr/lib/pymodules/python2.6/matplotlib/projections/__init__.py", line 61, in get_projection_class
raise ValueError("Unknown projection '%s'" % projection)
ValueError: Unknown projection '3d'
感谢。
答案 0 :(得分:1)
首先,我认为mplot3D在matplotlib版本0.99
中的工作方式与在当前版本的matplotlib中的工作方式略有不同。
您使用的是哪个版本? (尝试运行:python -c 'import matplotlib; print matplotlib.__version__'
)
我猜你正在运行版本0.99
,在这种情况下,您需要使用稍微不同的语法或更新到更新版本的matplotlib。
如果您正在运行版本0.99
,请尝试执行以下操作:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
其次,即使正确设置mplot3D
,您发布的代码也不起作用。
尝试一个更简单的例子。 E.g:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
plt.show()
编辑:如果您将ax = fig.add_subplot...
替换为ax = Axes3D(fig)
,实际上您发布的示例代码可以使用matplotlib 0.99。然而它似乎不适用于matplotlib 1.0,无论哪种方式......不确定问题是什么......