web-dev-qa-db-ja.com

Pythonでは、プロットで点を滑らかな線で接続する方法は?

スプラインを使用して点+滑らかな線をプロットしようとしています。しかし、この線は、たとえば次のコードで、ポイント0.85を超えていくつかのポイントを「オーバーシュート」します。

import numpy as np 
import matplotlib.pyplot as plt
from scipy.interpolate import spline

x=np.array([0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.9, 2])
y=np.array([0.57,0.85,0.66,0.84,0.59,0.55,0.61,0.76,0.54,0.55,0.48])

x_new = np.linspace(x.min(), x.max(),500)
y_smooth = spline(x, y, x_new)

plt.plot (x_new,y_smooth)
plt.scatter (x, y)

どうすれば修正できますか?

4
Zheng

Scipy.interpolateでinterp1dを使用してみてください。

import numpy as np 
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d

x=np.array([0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.9, 2])
y=np.array([0.57,0.85,0.66,0.84,0.59,0.55,0.61,0.76,0.54,0.55,0.48])

x_new = np.linspace(x.min(), x.max(),500)

f = interp1d(x, y, kind='quadratic')
y_smooth=f(x_new)

plt.plot (x_new,y_smooth)
plt.scatter (x, y)

これにより、次のことが得られます。

enter image description here

kindパラメータの他のいくつかのオプションは、ドキュメントにあります。

kind:strまたはint、オプション補間の種類を文字列として指定します( 'linear'、 'nearest'、 'zero'、 'slinear'、 'quadratic'、 'cubic' where'zero '、' slinear '、' quadratic 'および' cubic 'は、0次、1次、2次、または3次のスプライン補間、または使用するスプライン補間の次数を指定する整数を指します。デフォルトは「線形」です。

9
Joshua R.