10

私はmatplotlibで線をプロットしようとしています..私は正しいタイプの補間を探しています..私はこのようなものが欲しい

canvasxpress.org/line.html から取得

すべての線が平滑化されます。次のような、scipyとmatplotlibのいくつかの組み合わせを試しました

x_new = np.arange(x, x_length, 1)
tck = interpolate.splrep(x, y, s=3)
y_new = interpolate.splev(x_new, tck, der=0)
ax.plot(x_new, y_new, color+lstyle)

しかし、私が得る最良の結果は

私の結果

は増加する変数を表しているので、間違った表現です。何を検索できますか?

ありがとう

編集:私は自分からメソッドを実装することを考えていますが、それがすでに行われているかどうかはわかりません..疑似コードは次のとおりです

take x and y
calculate spline for each three points 
x[0], x[1], x[2] ... x[1], x[2], x[3] ... and so on
for each y[n] sums every computation done for it and divide by number of 
computations (i.e. y[1] is computed for triplette x[0..2] and x[1..3] so the 
sum is divided by two (average for each point is taken as its value)
4

5 に答える 5

12

そのタイプのグラフでは、単調な内挿が必要です。scipy.interpolateのPchipInterpolatorクラス(短いエイリアスpchipで参照できます)を使用できます。

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


# Data to be interpolated.
x = np.arange(10.0)
y = np.array([5.0, 10.0, 20.0, 15.0, 13.0, 22.0, 20.0, 15.0, 12.0, 16.0])

# Create the interpolator.
interp = pchip(x, y)

# Dense x for the smooth curve.
xx = np.linspace(0, 9.0, 101)

# Plot it all.
plt.plot(xx, interp(xx))
plt.plot(x, y, 'bo')
plt.ylim(0, 25)
plt.grid(True)
plt.show()

結果:

ここに画像の説明を入力してください

于 2012-10-17T14:32:32.327 に答える
1

少し見回しました。あなたが欲しいものは呼ばれています

単調3次補間、

こちらのウィキペディアを参照してください。あなたはここでそれについてmathexchangeについて議論しています、そして私はここでpythonの実装を見つけました。これがうまくいくかどうか教えてください!

于 2012-10-17T14:31:21.233 に答える
1

問題は表示の問題ではありません。補間の問題です。スプライン関数を使用して補間しています。適切な補間方法の選択は、使用しているデータの種類に大きく依存します。すべての状況で正しく動作する補間関数を期待することはできません (補間は、関数が増加していることを知る方法がありません)。

于 2012-10-17T13:23:28.983 に答える
1

補間は視覚化のための単なる線ではないことを理解することが重要です。これは、システム (測定したデータを生成するシステム) がどのように動作すると考えるかを表す数学的モデルです。さまざまなタイプの内挿は、システムに関するさまざまな仮定を表しています。

したがって、変数が増加するだけのシステムであることがわかっている場合は、適切なモデルを適合させる必要があります (つまり、適切な補間を使用します)。データを見ると、2 次多項式または指数関数が適切に適合するように見えます。Loess (局所回帰) フィットも機能します。numpy.polyfit() のようなカスタマイズされた関数、または scipy.optimize.curve_fit() を使用した一般的な曲線近似のいずれかを使用できます。システムについてさらに詳しい知識がある場合は、それを使用して適合するモデルを選択する必要があります。

于 2012-10-17T14:28:12.917 に答える
1

あなたはどちらかを見るべきです

scipy.interpolate.LSQUnivariateSpline と k パラメータ (スプラインの次数) で遊ぶ

または scipy.interpolate.UnivariateSpline と k と s パラメータで遊んでください。

于 2012-10-17T14:06:59.133 に答える