我的代码对两组数据执行线性回归。它工作得很好,但我不知道如何用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()
你想让方程式去哪里?把它放在标题上,例如:
plt.title('$y=%3.7sx+%3.7s$'%(slope, intercept))
。要将它放在绘图中,请使用plot.text
。有很多方法可以做到这一点,这取决于你想要的外观。你可以得到这条线的方程式:在边上的一个框中;浮动在绘图的中间;箭头指向这条线(见下文);沿着这条线书写;作为标题;作为标题(即,在通常出现在绘图下面的文本中——这将是最常见的方法);或者作为绘图中的一个盒装图例(例如,用不同颜色的线命名。
我最喜欢的,考虑到没有其他限制是一个箭头的线,因为然后读者毫无疑问是什么方程式实际上是指。为此,请使用^{} :
为了清晰起见,沿着这条线书写可能会更加清晰,但对于垂直线或交叉线,这将变得难以阅读,而且定位灵活性也会降低。就我个人而言,我不推荐这个标题,因为读者希望在这个位置看到真实的标题或情节主题,但这可能是最容易做到的,因为它不需要其他参数的位置。
相关问题 更多 >
编程相关推荐