2017-04-22 157 views
0

私はnumpyのGriddataを使って等高線プロットを作成して、かなり離れた測定データを持っています。 Griddataは実際に測定された部品とかなりよく相関しています。私は、測定点を少し超えてグリッドデータを外挿することを検討しています。私はRBFとinterp2Dを使ってみましたが、これらの2つの方法は輪郭プロファイルを根本的に変更します。RBFを利用したGridDataの補間

グリッドデータ(x、y、z)座標を抽出し、それらを輪郭が拡張し、グリッドデータ補間を維持するようにRBF関数に送る方法はありますか?それとも別の/より良い方法がありますか?

グリッドデータを取得するために、主にこの回答からさまざまな方法を試しましたが、成功しませんでした。 ます。http:// stackoverflow.com/questions/34489039/取得するデータポイント-から-scipyのダウンロード - 補間-griddata

ここでは私のコード(Pythonの3.4.3)である:以下

from matplotlib.mlab import griddata 
import matplotlib.pyplot as plt 
import numpy as np 
import scipy.interpolate as interp 

#data points 
x=[20,20,20,20,20,20,0,0,0,0,0,0,-20,-20,-20,-20,-20,-20] 
y=[59,27,16,-16,-27,-59,59,27,16,-16,-27,-59,59,27,16,-16,-27,-59] 
z=[0.212,0.2099,0.2097,0.2099,0.21,0.213,0.2117,0.209,0.2084,0.2085,0.2086,0.2113,0.2128,0.21,0.2098,0.2094,0.21,0.2114] 

# define grid. 
xi = np.linspace(-25, 25, 100) 
yi = np.linspace(-65, 65, 100) 
# grid the data. 
zi = griddata(x, y, z, xi, yi, interp='linear') 

#RBF Method 
##xi,yi=np.meshgrid(xi, yi) 
##RBFi = interp.Rbf(x, y, z, function='linear', smooth=0) 
### grid the data. 
##zi = RBFi(xi, yi) 

#interp2D 
#xi,yi=np.meshgrid(xi, yi) 
##zfun_smooth_interp2d = interp.interp2d(x, y, z, kind='cubic') 
##xvec = xi[0,:] 
##yvec = yi[:,0] 
##zi = zfun_smooth_interp2d(xvec,yvec) 


plt.figure(num=None, figsize=(9.95, 16.712), dpi=80, facecolor='w', edgecolor='k') 
# contour the gridded data, plotting dots at the nonuniform data points. 
CS = plt.contour(xi, yi, zi, 30, linewidths=0.5, colors='k') 
CS = plt.contourf(xi, yi, zi, 50, cmap=plt.cm.rainbow) 
plt.colorbar() # draw colorbar 
# plot data points. 
plt.scatter(x, y, marker='o', c='b', s=5, zorder=10) 
plt.xlim(-25, 25) 
plt.ylim(-65, 65) 

plt.show() 

されていますその結果生じるGriddataとRBFのグラフ。 Griddata RBF

答えて

0

はかなり工夫した後、私は(私は投稿元のリンクを使用して)それを把握することができました。これはおそらく最高ではありませんが、それは完了です。私はまだ新しい高さ配列にマスクされたデータがないことを確認する必要があります。新しいコードは次のとおりです。

from matplotlib.mlab import griddata 
import matplotlib.pyplot as plt 
import numpy as np 
import scipy.interpolate as interp 

#data points 
x=[20,20,20,20,20,20,0,0,0,0,0,0,-20,-20,-20,-20,-20,-20] 
y=[59,27,16,-16,-27,-59,59,27,16,-16,-27,-59,59,27,16,-16,-27,-59] 
z=[0.212,0.2099,0.2097,0.2099,0.21,0.213,0.2117,0.209,0.2084,0.2085,0.2086,0.2113,0.2128,0.21,0.2098,0.2094,0.21,0.2114] 

# define grid. 
xi = np.linspace(-20, 20, 21) 
yi = np.linspace(-59, 59, 21) 
# grid the data. 
zi = griddata(x, y, z, xi, yi, interp='linear') 

#from http:// stackoverflow.com/questions/34489039/ retrieving-data-points-from-scipy-interpolate-griddata 
xi_coords = {value: index for index, value in enumerate(xi)} 
yi_coords = {value: index for index, value in enumerate(yi)} 


#iterate to find all the griddata z-height values 
zii = [] 

for index, value in enumerate(xi): 
    for index, value2 in enumerate(yi): 
     zii.append(zi[xi_coords[value],yi_coords[value2]]) 

#RBF Method 
xi,yi=np.meshgrid(xi, yi) 
RBFi = interp.Rbf(xi, yi, zii, function='quintic', smooth=0) 
# re-grid the data to fit the entire graph 
xi = np.linspace(-25, 25, 151) 
yi = np.linspace(-65, 65, 151) 
xi,yi=np.meshgrid(xi, yi) 
zi = RBFi(xi, yi) 



plt.figure(num=None, figsize=(9.95, 16.712), dpi=80, facecolor='w', edgecolor='k') 
# contour the gridded data, plotting dots at the nonuniform data points. 
CS = plt.contour(xi, yi, zi, 30, linewidths=0.5, colors='k') 
CS = plt.contourf(xi, yi, zi, 50, cmap=plt.cm.rainbow) 
plt.colorbar() # draw colorbar 
# plot data points. 
plt.scatter(x, y, marker='o', c='b', s=5, zorder=10) 
plt.xlim(-25, 25) 
plt.ylim(-65, 65) 

plt.show() 
関連する問題