在使用axes3D绘制椭圆体时,我遇到了错误
TypeError:必须使用Axes3D实例作为第一个参数调用未绑定的方法plot()(改为使用ndarray实例)
我需要绘制内部随机数点的椭圆体。所以我用随机模块。但我无法确定出现这种错误的原因。该计划如下。
import random
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import *
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
n = 1000000
a = input("Enter the value of semi major axis: \n")
b = input("Enter the value of semi minor axis: \n")
c = input("Enter the value of c \n")
x = random.uniform(-a, a, n)
y = random.uniform(-b, b, n)
z = random.uniform(-c, c, n)
r = (x ** 2 / a ** 2) + (y ** 2 / b ** 2) + (z ** 2 / c ** 2)
rd = r[:] <= 1
xd = x[rd]
yd = y[rd]
zd = z[rd]
Axes3D.plot3D(xd, yd, zd, "*")
plot.show()
可能存在一些错误。我是初学者,请帮助我。
答案 0 :(得分:0)
import random
无法正常工作,甚至在您尝试绘制点云之前就会出现问题,因为random.uniform
的签名与您使用的签名不同。
我认为您使用的真实陈述是from numpy import random
...
此外,导入3d功能的标准方式(并且有一个原因)是from mpl_toolkits.mplot3d import Axes3D
- 这会修改轴对象的定义,并且这就是你所需要的。
最后,当你真正需要的是.plot()
时,你使用.scatter()
方法,它不会绘制连接各个点的线。
我尝试完成的内容如下(请注意,我使用修改后的ax
对象,而不是Axes3D
...)
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from numpy.random import uniform
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
n, a, b, c = 2000, 10.0, 6.0, 20.0
x, y, z = [uniform(-d, d, n) for d in (a, b, c)]
inside = ((x/a)**2 + (y/b)**2 + (z/c)**2) <= 1.0
ax.scatter(x[inside], y[inside], z[inside])
plt.show()