2017-03-06 9 views
0

step1で決定します。私は一束の点について線形回帰を行い、線を得る。 step2。私はこの一点のポイントを平均化することによって中心点を得る。 step3。私はステップ1で回帰直線に垂直で、ステップ2で述べた中心点を通る線を探したいと思います。私が考えたものは、ある点を通る他の線に垂直な線を、Python

-1/K1 = K2、そして、回帰直線Y1 = K1の*×1 + B1、垂直線Y2 = K2の*×2 + B2を想定質問:からグラフは、2つの直線が垂直ではないように見えます。なぜですか?

私のpythonコード何が起こったのか:xy軸は同じスケールを持っていないので、 `

import numpy as np 
import scipy.linalg 
import matplotlib.pyplot as plt 
from openpyxl import load_workbook 


x = [140.0, 139.0, 145.0, 151.0, 156.0, 160.0, 162.0, 162.0, 156.0, 139.0, 129.0, 124.0, 125.0, 128.0, 127.0, 126.0, 126.0, 132.0, 139.0, 145.0, 150.0, 156.0, 155.0, 148.0, 135.0, 129.0, 125.0, 127.0, 128.0, 126.0, 123.0, 124.0, 130.0, 135.0, 142.0, 151.0, 158.0, 155.0, 148.0, 140.0, 126.0, 124.0, 127.0, 127.0, 126.0, 126.0, 126.0, 131.0, 138.0, 141.0, 159.0, 167.0, 162.0, 155.0, 147.0, 141.0, 138.0, 140.0, 140.0, 140.0, 138.0, 143.0, 150.0, 155.0, 163.0, 173.0, 178.0, 173.0] 
y = [621.0, 621.0, 630.0, 638.0, 636.0, 635.0, 635.0, 634.0, 628.0, 623.0, 617.0, 614.0, 618.0, 622.0, 617.0, 610.0, 612.0, 622.0, 626.0, 623.0, 622.0, 624.0, 625.0, 618.0, 613.0, 607.0, 608.0, 614.0, 614.0, 608.0, 603.0, 612.0, 616.0, 617.0, 616.0, 618.0, 622.0, 622.0, 615.0, 609.0, 607.0, 610.0, 612.0, 607.0, 606.0, 601.0, 611.0, 617.0, 615.0, 614.0, 619.0, 624.0, 625.0, 619.0, 615.0, 613.0, 618.0, 622.0, 616.0, 610.0, 614.0, 628.0, 625.0, 624.0, 628.0, 638.0, 646.0, 645.0] 

def get_center(x,y): 
    x = x[:-1] 
    y = y[:-1] 
    x0 = np.mean(x) 
    y0 = np.mean(y) 
    return x0, y0 

#center point 
x0,y0 = get_center(x,y) 

#linear regression 
# fit_fn is now a function which takes in x and returns an estimate for y 
fit = np.polyfit(x,y,1) 
fit_fn = np.poly1d(fit) 

plt.plot(x0,y0,'bo') 
#get the linear regression line 
plt.plot(x,y, 'ro', x, fit_fn(x), '--k') 

#get the perpendicular line going through the center point 
plt.plot(x,(-1.0/fit[0])*(x-x0)+y0,'--b') 
plt.grid(True) 
plt.show() 

this is the link of the graph I got by running the program

`

+1

xとyの寸法が異なるため、線が歪んでいます。 – karakfa

+0

ありがとう、それは – Xuyong

答えて

1

例えばラインplt.axis([120, 180, 590, 650])を追加します。 、x軸との両方を持つこと210軸は同数のラベルを表示します(60)

+0

ありがとう、私はそれを持っています。 – Xuyong

関連する問題