三维极坐标图网格数据不允许三次插值,只允许线性插值导致“不光滑”p

2024-09-21 00:22:51 发布

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

我正在绘制天线周围磁场强度的三维极坐标图。数据示例如下所示:

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,其中包含半径、角度和每个唯一点处场强的线性值。在

我想绘制一个三维极坐标图。为此,我把R和P值从极坐标转换成笛卡尔坐标X和Y

^{pr2}$

然后我使用下面的代码来插值数据

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()

这将创建以下绘图

Plot

有没有办法让表面更光滑?使用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。这些价值观是什么?在


Tags: ofthe数据nonenumber绘制nan天线
1条回答
网友
1楼 · 发布于 2024-09-21 00:22:51

s是一个参数,用于设置给定点的误差(即插值曲面可以错过源点的距离)。如果s=0,则插值必须精确命中每个点。如果数据中有噪声,高阶导数将不平滑,这将导致1)使拟合曲面看起来很糟糕,因为它会扭曲自身以使值高导数2)需要大量的控制点。在

对于噪声数据,高阶插值实际上比线性插值差得多。在

根据interp2D文档,它实际上只是调用bisplrepdoc),您可以直接使用它,并且可以访问更多的旋钮。在

为了得到“窒息”插值,你必须接受原始数据的某种程度的平滑。这是否可以取决于你。在

相关问题 更多 >

    热门问题