如何根据斜率和截距添加直线
在R语言中,有一个叫做abline
的函数,可以根据给定的截距(第一个参数)和斜率(第二个参数)在图上画一条线。比如,
plot(1:10, 1:10)
abline(0, 1)
这里的这条线,截距是0,斜率是1,覆盖了整个图的范围。那么在Matplotlib中有没有类似的函数呢?
12 个回答
39
我知道这个问题已经有几年了,但因为没有被认可的答案,所以我来分享一下对我有效的方法。
你可以先把你的数据点画在图上,然后再生成一组新的数据点,这些点是最优拟合线的坐标,然后把这条线画在你原来的图上。比如,看看下面的代码:
import matplotlib.pyplot as plt
import numpy as np
# Some dummy data
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 3, 3, 2, 5, 7, 9]
# Find the slope and intercept of the best fit line
slope, intercept = np.polyfit(x, y, 1)
# Create a list of values in the best fit line
abline_values = [slope * i + intercept for i in x]
# Plot the best fit line over the actual values
plt.plot(x, y, '--')
plt.plot(x, abline_values, 'b')
plt.title(slope)
plt.show()
125
很多解决方案都在讲怎么在图上加一条线,让它更好地符合数据。这里有一个简单的方法,可以根据斜率和截距在图上添加任意一条线。
import matplotlib.pyplot as plt
import numpy as np
def abline(slope, intercept):
"""Plot a line from slope and intercept"""
axes = plt.gca()
x_vals = np.array(axes.get_xlim())
y_vals = intercept + slope * x_vals
plt.plot(x_vals, y_vals, '--')