如何使用scipy stats打印直线方程

2024-05-23 19:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码对两组数据执行线性回归。它工作得很好,但我不知道如何用scipy或numpy将直线方程打印到图形本身上。

这是我的代码:

y=np.array([15,1489,859,336,277,265,229,285,391,372,5,345])
x=np.array([196.16,17762.47,28542.19,30170.5,9384.06,43210.29,21819.2,16978.2,45767.54,12328.78,113.71,19257.6])

print x
print y

slope, intercept, r_value, p_value, slope_std_error = stats.linregress(x, y)
print "slope = "+ str(slope)
print "r_value = "+ str(r_value)
print "r_squared = " + str(r_value**2)
print "p_value = "+str(p_value)
# Calculate some additional outputs
predict_y = intercept + slope * x
print predict_y
pred_error = y - predict_y
degrees_of_freedom = len(x) - 2
residual_std_error = np.sqrt(np.sum(pred_error**2) / degrees_of_freedom)


# Plotting
pylab.xlabel('cost')
pylab.ylabel('signups')
pylab.plot(x, y, 'o')
pylab.plot(x, predict_y, 'k-')
pylab.show()

Tags: of代码valuenperrorarraypredictslope
2条回答

你想让方程式去哪里?把它放在标题上,例如:plt.title('$y=%3.7sx+%3.7s$'%(slope, intercept))。要将它放在绘图中,请使用plot.text

enter image description here

有很多方法可以做到这一点,这取决于你想要的外观。你可以得到这条线的方程式:在边上的一个框中;浮动在绘图的中间;箭头指向这条线(见下文);沿着这条线书写;作为标题;作为标题(即,在通常出现在绘图下面的文本中——这将是最常见的方法);或者作为绘图中的一个盒装图例(例如,用不同颜色的线命名。

我最喜欢的,考虑到没有其他限制是一个箭头的线,因为然后读者毫无疑问是什么方程式实际上是指。为此,请使用^{}

x0 = 20000
y0 = slope*x0+intercept
pylab.annotate(line_eqn, xy=(x0, y0), xytext=(x0-.4*x0, y0+.4*y0),
             arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=-0.5'))

enter image description here

为了清晰起见,沿着这条线书写可能会更加清晰,但对于垂直线或交叉线,这将变得难以阅读,而且定位灵活性也会降低。就我个人而言,我不推荐这个标题,因为读者希望在这个位置看到真实的标题或情节主题,但这可能是最容易做到的,因为它不需要其他参数的位置。

相关问题 更多 >