使用matplotlib 3D plot绘制椭球体时出错,其中包含随机点数:Python

2024-06-12 00:00:42 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用axes3D绘制椭球体时,我遇到了一个错误

TypeError:调用unbound method plot()时必须使用Axes3D实例作为第一个参数(改为获取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()

可能有一些错误。我是初学者,请帮帮我。在


Tags: ofthe实例importinputplotvalue错误
1条回答
网友
1楼 · 发布于 2024-06-12 00:00:42

您的import random无法工作,甚至在您试图绘制点云之前就会出现问题,因为{}与您使用的签名不同。在

我想您使用的真正语句是from numpy import random。。。在

此外,导入3d功能的标准方法是from mpl_toolkits.mplot3d import Axes3D-这会修改axis对象的定义,这就是您所需要的全部。在

最后,当您真正需要的是.scatter()时,您可以使用.plot()方法,它不会绘制连接各个点的线。在

我对您要实现的目标的理解如下(注意,我使用的是修改后的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()

example plot

相关问题 更多 >