2017-02-23 16 views
0

ここでいくつかの点にcurve_fitを使ってsin関数をフィットしようとしています。フィット感とポイントの両方をプロットするとき、私は説明する方法がわからないので、いくつかの画像を投稿する方が良いです。点の間に線を結ぶPythonプロット

次のコード行の利回り使用:線のスタイルを使用して

plt.plot(phase_min, sinusoidal_function(phase_min, *popt), '.', lw=3) 

を ' - '、私が手:

は、どのように私は気を持つことができます間にあるすべてのドットを結んでいるわけではありません。 ありがとう!

+0

'phase_min'をソートしましたか? –

+0

私は必要とは思わない。 phase_minはソートされたフェーズに従います。私はそれが行動を継承すると思いますか? (ここのPy初心者) – nyw

+1

私はそれが既に分類されているとは思わない。それを印刷してチェックすることができます。また、カーブフィッティングの後、元の変数値に対してフィットしたカーブをプロットする必要はありません。プロットする範囲のx値を作成する必要があります。 'x = np.arange(0、1、0.001)、y = sinusoidal_function(x、* popt)、plt.plot(x、y)' –

答えて

1

あなたはnp.argsortを使用することができます。

xyがあなたのオレンジ色のドットの座標である
order = np.argsort(x) 
xsorted = x[order] 
ysorted = y[order] 

+0

私は分かりません。 phase_minをソートすると私には何か変わったものが与えられます http://imgur.com/a/yrEbx – nyw

+0

このトリックは一緒に_rearranging_ 'x'と' y'です。あなたが2つのうちの1つだけをソートすれば、あなたは座標ペアを分けていて、何か変わったことが予想されます。 'phase_min'をソートし、ソートされた' phase_min'にyout sinusoidal関数を適用し、ソートされたものをプロットの両方のデータ引数に使用してみてください。 –

+0

私はphase_min.sort()を使ってそれを行い、あなたのコメントの上のリンクにプロットを取得します。 – nyw

1

matplotlibに線をプロットすると、自動的にポイントが同じ順序で接続されます。あなたの問題は、あなたのphase_minがソートされていないとmatplotlibが順番にあなたのデータポイントを接続しようとしていることである

import matplotlib.pyplot as plt 
plt.plot([1,3,2], [1,2,3]) 

enter image description here

:以下の例を参照してください。実際には既にフィット関数があるので、関数をプロットするために元のデータを使う必要はありません。以下のように、線をプロットするデータ点を定義することができます。このようにして、プロットを作成したいデータ点の数を増やすことができます。元のデータ点を使用してプロットを作成する場合よりも線が滑らかになります。

x=np.arange(0, 1, 0.001) 
y=sinusoidal_function(x, *popt) 
plt.plot(x,y) 
+0

ああ、今私は見る:)これは意味がある。私が理解していないことは、phase_minをソートしても、まだ奇妙な結果が得られる理由です。これはポイント・ツー・ポイント接続を処理していたはずであり、すべてが順調でなければなりません。私が間違っている? – nyw

+0

@nywフィッティングプロセスの前後に 'phase_min'をソートしていますか?フィッティングする前にソートする場合は、 'phase_min'と' y'値の間の対応が変更されていないことを確認する必要があります。プロットを作成する前に、フィッティングプロセスの後でソートする必要があります。それでもなお、上記の方法が好ましいはずである。 –

関連する問題