2017-03-21 7 views
0

xとyはデータリストで線形のトレンド線でうまくプロットしています。
また、立方体のトレンドラインを追加したいと思います。グラフに線形トレンド線の代わりに3次関数を追加しようとしています

import matplotlib.pyplot as plt 
x = (distanceList) 
y = (percentCopper) 
plt.scatter(x,y) 
title = "trendLine" 
xLabel = "Distance m" 
yLabel = "percent copper" 
plt.title (title, fontsize=10); 
plt.ylabel(yLabel, fontsize=10); 
plt.xlabel(xLabel, fontsize=10); 
fit = np.polyfit(x,y,1) 
fit_fn = np.poly1d(fit) 
plt.plot(x, y, '.', x, fit_fn(x), 'r') 
plt.xlim(0, 50) 
plt.ylim(0, 2.5) 
plt.show() 
+0

は、あなたが実際にここで問題はありません。立方体のトレンドラインを追加するのは正確にどの部分に問題がありますか?あなたはフィットを計算する必要がありますか、または両方のフィットを一緒にプロットするか、それとも全く別のものをプロットする必要がありますか? – Tuffwer

+0

私は線形フィット線と3次関数をプロットすると仮定しています –

+0

私はこの既存の問題は、あなたのプロットに三次フィットを追加するために必要なすべてをカバーする必要があると思いますhttp://stackoverflow.com/questions/18767523/fitting-data-with -numpy – Tuffwer

答えて

2

だけnp.polyfit(x,y,3)を使用して、以下のコードのように、プロットに追加します。

import matplotlib.pyplot as plt 
import numpy as np 
x = np.array(range(50)) 
y = x**3/5000.0-x/5000.0 
plt.scatter(x,y) 
title = "trendLine" 
xLabel = "Distance m" 
yLabel = "percent copper" 
plt.title (title, fontsize=10); 
plt.ylabel(yLabel, fontsize=10); 
plt.xlabel(xLabel, fontsize=10); 
fit = np.polyfit(x,y,1) 
fit3 = np.polyfit(x,y,3) 
fit_fn = np.poly1d(fit) 
fit_fn3 = np.poly1d(fit3) 
plt.plot(x, y, '.', x, fit_fn(x), fit_fn3(x), 'r') 
plt.xlim(0, 50) 
plt.ylim(0, 2.5) 
plt.show() 

enter image description here

+0

これは正しく機能しません。なぜなら、polyfit関数は多項式の係数のリストをpoly1dがそれらの値を期待する逆の順序で返すからです。質問に対する私のコメントのリンク先のトップへの答えそのリストの順序を逆にするか、poly1dの代わりに多項式関数を使用する必要があります。 – Tuffwer

+0

@Tuffwer本当ですか?私はyをy = x ** 3/5000.0-x/5000.0に変更して少し複雑にしました。プロットを添付します。それは正しいフィッティングのようですね。 –

+0

さて、私は昨夜、約15分のドキュメントを読んで、私が読んだことを誓った。 [polyfit](https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html)と[poly1d](https://docs.scipy.org/doc/numpy/)の再読。 reference/generated/numpy.poly1d.html)今注文は一致しているようだが、私は完全に間違っていた。謝罪、私のupvoteを持っています。 – Tuffwer

関連する問題