量度d的Python三维绘图

2024-10-01 07:12:38 发布

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

我已经在一个球体上捕捉到了三维测量数据(这是一个天线辐射模式,所以测量天线捕捉了每个φ、θ方向的辐射强度,并将这个值记录为phi,theta的函数)。在

我很难得到代表的数据。 我试过多种选择。这是我现在尝试的最后一个:

import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt

nElevationPoints = 16
nAzimuthPoints = 40
stepSizeRad = 0.05 * np.pi
def r(phi,theta):
    radius = 1
    return radius

phi = np.arange(0,nAzimuthPoints*stepSizeRad,stepSizeRad)
theta = np.arange(0,nElevationPoints*stepSizeRad,stepSizeRad)

x = (r(phi,theta)*np.outer(r(phi,theta)*np.cos(phi), np.sin(theta)))
y = (-r(phi,theta)*np.outer(np.sin(phi), np.sin(theta)))
z = (r(phi,theta)*np.outer(np.ones(np.size(phi)), np.cos(theta)))

fig = plt.figure(1)
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z,  rstride=4, cstride=4, color='b')

plt.ioff()
plt.show()

这段代码本身正在工作,它绘制了一个球体。现在的问题是,根据测量数据,我需要半径不是常数“1”,而是对应于测量的辐射强度。所以它必须是φθ的函数。在

但是,一旦我把“r”函数改成任何包含phi或theta参数的函数,就会得到一个关于无法广播的操作数的错误。在

如果有什么办法可以绕过φ,θ,那也很好。在

但我现在卡住了,所以我很感激你的帮助:-)

顺便说一句,我之所以采用上述方法,是因为我无法理解如何定义x,y,z,以便能被plot_曲面函数接受。 我确实通过计算phi,theta,强度数据的实际位置(x,y,z)生成了一个散射图,但这只是一个单独点的表示,没有生成任何清晰可见的天线辐射模式图。为此,我假设等高线图会更好,但是我又一次陷入了“r”函数调用或者理解x,y,z应该如何格式化(文档中提到x,y,z需要是2D数组,但这超出了我的理解范围,因为x,y,z本身通常是一维数组)。在

不管怎样,希望任何人都愿意提供帮助。在

--编辑--

根据@M4rtini建议的更改,我得出以下结论:

^{pr2}$

谢谢,@M4rtini,我现在可以有一个φ,θ依赖的“r”函数。 但是,请注意,该示例现在确保phi和theta的长度相同(由于mgrid函数)。在我看来,情况并非如此。当分别声明φ和θ时,它仍然不起作用。现在我来看看插值。在


Tags: 数据函数importasnppltsin天线
1条回答
网友
1楼 · 发布于 2024-10-01 07:12:38

这可能不是您要寻找的确切答案,但如果您可以接受使用强度值作为颜色的映射,则该方法应该有效。
实际上,你也可以在这里计算一个具体的r。但我没有测试。
使用mayavi,因为在我看来,它远远优于matplotlib的3D格式

import numpy as np
from mayavi import mlab
r = 1.0
phi, theta = np.mgrid[0:np.pi:200j, 0:2*np.pi:101j]

x = r*np.sin(phi)*np.cos(theta)
y = r*np.sin(phi)*np.sin(theta)
z = r*np.cos(phi)

intensity = phi * theta

obj = mlab.mesh(x, y, z, scalars=intensity, colormap='jet')
obj.enable_contours = True
obj.contour.filled_contours = True
obj.contour.number_of_contours = 20
mlab.show()

示例脚本的输出,现在这是在一个交互式gui中。所以你可以随意旋转,平移,缩放。甚至可以交互操作数据和表示选项。 Output of example script

相关问题 更多 >