gpt4 book ai didi

python /Matplotlib : adding regression line to a plot given its intercept and slope

转载 作者:太空狗 更新时间:2023-10-30 01:05:40 24 4
gpt4 key购买 nike

使用以下小型数据集:

bill = [34,108,64,88,99,51]
tip = [5,17,11,8,14,5]

我计算了一条最佳拟合回归线(手动)。

yi = 0.1462*x - 0.8188 #yi = slope(x) + intercept

我使用 Matplotlib 绘制了我的原始数据,如下所示:

plt.scatter(bill,tip, color="black")
plt.xlim(20,120) #set ranges
plt.ylim(4,18)

#plot centroid point (mean of each variable (74,10))
line1 = plt.plot([74, 74],[0,10], ':', c="red")
line2 = plt.plot([0,74],[10,10],':', c="red")

plt.scatter(74,10, c="red")

#annotate the centroid point
plt.annotate('centroid (74,10)', xy=(74.1,10), xytext=(81,9),
arrowprops=dict(facecolor="black", shrink=0.01),
)

#label axes
plt.xlabel("Bill amount ($)")
plt.ylabel("Tip amount ($)")

#display plot
plt.show()

我不确定如何将回归线放到图本身上。我知道有很多内置的东西可以快速拟合和显示最佳拟合线,但我这样做是为了练习。我知道我可以在点“0,0.8188”(截距)开始画线,但我不知道如何使用斜率值来完成线(设置线终点)。

鉴于 x 轴每增加一次,斜率应增加“0.1462”;对于线坐标,我尝试将 (0,0.8188) 作为起点,将 (100,14.62) 作为终点。但是这条线不通过我的质心点。它只是错过了它。

干杯,乔恩

最佳答案

问题中的推理部分正确。有了函数 f(x) = a*x +b,您可以将 y 轴 (x=0) 的截距作为第一个点作为 (0, b)(或本例中的 (0,-0.8188))。
该线上的任何其他点由 (x, f(x))(x, a*x+b) 给出。所以查看 x=100 处的点会得到 (100, f(100)),插入:(100, 0.1462*100-0.8188) = (100,13.8012)。在您在问题中描述的情况下,您只是忘记了考虑 b

下面显示了如何使用该函数在 matplotlib 中绘制线条:

import matplotlib.pyplot as plt
import numpy as np

bill = [34,108,64,88,99,51]
tip = [5,17,11,8,14,5]
plt.scatter(bill, tip)

#fit function
f = lambda x: 0.1462*x - 0.8188
# x values of line to plot
x = np.array([0,100])
# plot fit
plt.plot(x,f(x),lw=2.5, c="k",label="fit line between 0 and 100")

#better take min and max of x values
x = np.array([min(bill),max(bill)])
plt.plot(x,f(x), c="orange", label="fit line between min and max")

plt.legend()
plt.show()

enter image description here

当然拟合也可以自动完成。您可以通过调用 numpy.polyfit 获取斜率和截距:

#fit function
a, b = np.polyfit(np.array(bill), np.array(tip), deg=1)
f = lambda x: a*x + b

图中的其余部分将保持不变。

关于 python /Matplotlib : adding regression line to a plot given its intercept and slope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43152529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com