如何绘制超过127或128的散点图和回归线?

时间:2015-03-02 20:20:36

标签: python matplotlib

我正在尝试制作一个简单的散点图并覆盖一个简单的回归。无论如何,所有x,y点都以散射形式绘制,如预期的那样。大。我的问题是,如果N> 127,则绘制所有(x,y)点,但回归线不会从min(x)延伸到max(x)。回归线应该从左侧(到min(x))一直延伸到max(x)。这里发生了什么,我该如何解决?

fig1, ax1 = plt.subplots(1,1)
N=128
x=np.random.rand(N)
y=np.random.rand(N) 
fit = np.polyfit(x,y,1) 
fit_fn = np.poly1d(fit)
ya=fit_fn(x)
ax1.plot(x,y, 'bo',x, ya,'-k')

我注意到如果我将最后一行更改为

ax1.plot(x,y, 'bo',x, ya,'-ko')

然后所有点都会绘制,但这不是我想要的,因为这给了我一个x,ya而不是一条线的散点图。

enter image description here

1 个答案:

答案 0 :(得分:1)

我现在明白了。我不太确定为什么会发生这种情况,但有一种解决方法。这会产生相同的结果吗? (见下文)

import matplotlib.pyplot as plt
import numpy as np
fig1, ax1 = plt.subplots(1,1)

#distribute N random points in interval [0,1>
N=300
x=np.random.rand(N)
y=np.random.rand(N)

#get fit information
fit = np.polyfit(x,y,1) 
fit_fn = np.poly1d(fit)

#extend fitted line interval to make sure you
#get min and max on x axis
current = np.arange(min(x), max(x), 0.01)
current_fit = np.polyval(fit_fn, current)

#you can extend it even, default is color blue
future = np.arange(min(x)-0.5, max(x)+0.5, 0.01)
future_fit = np.polyval(fit_fn, future)

#plot
ax1.plot(x,y, 'bo')
ax1.plot(current, current_fit, "-ko")
ax1.plot(future, future_fit)

plt.show()

enter image description here