2016-07-26 4 views

答えて

0

x、y、zを別々に補間するのはどうですか?私はthisチュートリアルの例を変更し、それに補間を追加しました:

import matplotlib as mpl 
from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib.pyplot as plt 
from scipy.interpolate import InterpolatedUnivariateSpline 

mpl.rcParams['legend.fontsize'] = 10 

# let's take only 20 points for original data: 
n = 20 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
theta = np.linspace(-4 * np.pi, 4 * np.pi, n) 
z = np.linspace(-2, 2, n) 
r = z**2 + 1 
x = r * np.sin(theta) 
y = r * np.cos(theta) 
ax.plot(x, y, z, label='rough curve') 

# this variable represents distance along the curve: 
t = np.arange(n) 

# now let's refine it to 100 points: 
t2 = np.linspace(t.min(), t.max(), 100) 

# interpolate vector components separately: 
x2 = InterpolatedUnivariateSpline(t, x)(t2) 
y2 = InterpolatedUnivariateSpline(t, y)(t2) 
z2 = InterpolatedUnivariateSpline(t, z)(t2) 

ax.plot(x2, y2, z2, label='interpolated curve') 

ax.legend() 
plt.show() 

結果は次のようになります。 3d line plot

UPDATE

は申し訳ありませんが、初めてで質問を理解していませんでした。

おそらく、三角形補間が必要です。試してくださいthis

+0

返信いただきありがとうございます。パラメータ化を使用することは、私のケースではオプションではありません。なぜなら、パラメータ化が何であるかわからないからです... – Odile

+0

ええ、あなたはラインを補間する必要があると思いました。更新された回答をご覧ください。 – koxy

+0

三角補間は、等間隔の座標に対して行われ、鉱山は散在します。とにかく、いろいろなメソッドを使いました。私の唯一の選択肢は、線形補間を行い、scipy.interpolate.griddata()を使うことだけです。 – Odile

関連する問題