アンテナ周辺の電界強度の 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 を使用したデータの補間は機能せず、行列 zi に "nan" 値を入力するだけです。おそらく、より優れた 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 であるようです。これらの値は何ですか?