问题描述
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats
xx = np.load('./x.npy')
yy = np.load('./y.npy')
fig,ax = plt.subplots()
fig = plt.gcf()
fig.set_size_inches(16,8)
labels = ['C1','C2']
colors = ['r','b']
for idx in range(2):
df = pd.DataFrame({'x': xx,'y': yy[idx]})
ax.set(xlim=(np.min(df.x),np.max(df.x)),ylim=(np.min(df.y),np.max(df.y)))
p = sns.regplot('x','y',df,scatter=False,order=2,ax=ax,label=labels[idx],color=colors[idx])
slope,intercept,r_value,p_value,std_err = stats.linregress(
x=p.get_lines()[0].get_xdata(),y=p.get_lines()[0].get_ydata())
formula = str(slope) + ' x\N{SUPERSCRIPT TWO} ' + str(intercept)
print('formula: ',formula)
我正在尝试计算sns.regplot拟合线的斜率和截距,它会给我:
formula: 82.53958162912909 x² 130.19916935648575
formula: 82.53958162912909 x² 130.19916935648575
其中:
-
从图中可以看出,这是错误的,对于x值为6,我们期望y值为600。
-
两条线的斜率和截距相同。我们希望会有所不同。
解决方法
即使您已经在Line2D
和xx
中拥有数据,我也不知道为什么要从yy
对象中获取数据,但是无论如何:
在循环中计算回归时,每次迭代都传递相同的数据集(第[0]
行)。我想你是要写
slope,intercept,r_value,p_value,std_err = stats.linregress(
x=xx,y=yy[idx])