我正在绘制天线周围场强的 3D 极坐标图。数据样本如下所示:
0.5 0 -22
0.5 0 -21
0.5 0 -22
0.5 0 -21
0.5 0 -22
0.5 0 -22
0.5 0 -22
0.5 0 -22
第 1 列是天线的半径,第 2 列是天线周围的角度,第 3 列是场强的 dBm 值。
我在每个点都采集了一些样本,这些样本由我的脚本平均。3 个对应的列表 R、P 和 Z,其中包含每个独特点的场强的半径、角度和线性值。
我想绘制值的 3D 极坐标图。为此,我将 R 和 P 值从极坐标转换为笛卡尔坐标 X 和 Y。
# transform them to cartesian system
X,Y = R*np.cos(P),R*np.sin(P)
然后我使用以下代码插入数据
xi = np.linspace(X.min(),X.max(),100)
yi = np.linspace(Y.min(),Y.max(),100)
zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='linear')
然后我创建一个网格并绘制数据如下
xig, yig = np.meshgrid(xi, yi)
surf = ax.plot_surface(xig, yig, zi,linewidth=0)
plt.show()
这将创建以下图
有没有办法让表面更光滑?使用 griddata type=cubic 插值数据不起作用,只是用“nan”值填充矩阵 zi。也许有更好的 3D 替代方案,或者我做错了什么?
使用建议的 interp2d 函数刚刚导致 zi 被 nan 值填充。我已通过以下方式使用它:
zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='linear')
interp2d(xi, yi, zi, kind='cubic')
和
zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='linear')
zi = interp2d(xi, yi, zi, kind='cubic')
两者都给出了以下错误,
Warning: No more knots can be added because the number of B-spline coefficients
already exceeds the number of data points m. Probably causes: either
s or m too small. (fp>s)
kx,ky=3,3 nx,ny=104,105 m=10000 fp=nan s=0.000000
我也试过
interp = interp2d(X,Y,Z,kind='cubic'); new_zi = interp(xi, yi)
这给了我一个类似的错误:
Warning: No more knots can be added because the number of B-spline coefficients
already exceeds the number of data points m. Probably causes: either
s or m too small. (fp>s)
kx,ky=3,3 nx,ny=14,15 m=104 fp=nan s=0.000000
虽然 m 小得多。
看起来问题是 s 为 0 且 fp=nan。这些价值观是什么?