極形式で、円形領域のさまざまなポイントで取得された不規則な間隔のデータの小さなセットがあります。規則的な間隔のグリッドでデータを取得するために内挿を行う必要があります。次に、等高線図を使用してそれらをプロットしたいと思います。
補間を実行して結果をプロットすることができましたが、補間を実行するには極座標から直交座標に変換する必要があり、データを極座標に変換し直すと、極プロットにアーティファクトが発生します。
次のコードは、私がこれまでに持っているものを示し、極座標と長方形のプロットにデータをプロットします。
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import Rbf
# inputs as 1D arrays
r = np.array([0, 1, 1, 1, 1, 2, 2, 2, 2])
theta = np.radians(np.array([0, 90, 180, 270, 0, 90, 180, 270, 0]))
# z = f(theta, r)
z = np.array([8, 7, 6, 4, 5, 2, 2, 2, 2])
# convert to rect
x = r * np.cos(theta)
y = r * np.sin(theta)
# create RBF for smoothing
rbf = Rbf(x, y, z)
# create grid to smooth over
xi, yi = np.mgrid[-2:2:10j, -2:2:10j]
# smooth
zi = rbf(xi, yi)
# convert back to polar
ri = np.sqrt(xi*xi + yi*yi)
ti = np.arctan2(yi, xi)
# polar plot
fig = plt.figure()
ax = plt.subplot(121, polar=True)
cax = ax.contour(ti, ri, zi, 10, linewidths=0.5, colors='k')
cax = ax.contourf(ti, ri, zi, 10, cmap=plt.cm.Spectral)
ax.set_rmax(2)
# rect plot
ax = plt.subplot(122)
cax = ax.contour(xi, yi, zi, 10, linewidths=0.5, colors='k')
cax = ax.contourf(xi, yi, zi, 10, cmap=plt.cm.Spectral)
plt.show()
残りの問題は次のとおりです。
- 等高線のアーティファクトを修正できますか?
- Scipyは、極座標を含むそのような小さなデータセットに対して機能する、より適切な内挿アルゴリズムを提供しますか?