Python 如何在pyplot中绘制垂直偏移

Python 如何在pyplot中绘制垂直偏移,python,matplotlib,Python,Matplotlib,我有一个简单的散点图如下。在绘制数据和拟合之后,我想显示每个数据点的错误(带方向)。我在matplotlib中努力做到这一点 %matplotlib inline import pandas as pd import matplotlib.pyplot as plt house_dic={'sqf':[700,950,1100, 1400, 2000],'price': [780, 800, 950, 1500, 1900]} house=pd.DataFrame(house_dic) pl

我有一个简单的散点图如下。在绘制数据和拟合之后,我想显示每个数据点的错误(带方向)。我在matplotlib中努力做到这一点

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt

house_dic={'sqf':[700,950,1100, 1400, 2000],'price': [780, 800, 950, 1500, 1900]}

house=pd.DataFrame(house_dic)
plt.scatter(house['sqf'],house['price'])
plt.xlabel('Square Feet')
plt.ylabel('Price $K')

w=1
y_fit=house['sqf']*w
plt.plot(house['sqf'], y_fit)
最终的图形应该是这样的(我在keynote中手动绘制了箭头) 谢谢

您可以使用

前四个参数是:开始x(
sqf
)、开始y(
y_-fit
)、x的变化(这里是0,因为我们需要垂直线),以及y的变化(我计算的是剩余距离的一部分)。
箭头尺寸
值可更改箭头的大小

resid = house['price'] - y_fit
shrink = -.2
arrow_dim = (20, 20)

for i in range(len(house)):
    plt.arrow(house.loc[i, 'sqf'], y_fit[i], 0, resid[i] + resid[i]*shrink , 
              head_width=arrow_dim[0], head_length=arrow_dim[1], fc='r', ec='r')


试试这个

@andrew_reece-非常感谢!这正是我需要的欢迎来到堆栈溢出。虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请编辑您的答案,添加解释,并说明适用的限制和假设。
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(32)
exp = np.arange(1,11)
salary = np.random.randint(20000,100000,10)
salary = salary[0]*0.1*exp + salary
salary = np.sort(salary)
x = exp.reshape(-1,1) # To change 1 Dimesion to 2 Dimension
y = salary
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x,y)
y_pred = model.predict(x)
plt.scatter(x,y)
plt.plot(x,y_pred,c='r')
for i in range(len(x)):
  plt.plot([x[i],x[i]],[y[i],y_pred[i]],c='k')