如何根据斜率和截距添加直线

94 投票
12 回答
173761 浏览
提问于 2025-04-17 05:15

在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()
45

到2021年,matplotlib 3.3.4版本开始支持用斜率和一个点来画线。

fig, ax = plt.subplots()

ax.axline((0, 4), slope=3., color='C0', label='by slope')
ax.set_xlim(0, 1)
ax.set_ylim(3, 5) 
ax.legend()

在这里输入图片描述

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, '--')

撰写回答