我想在x,y散点图上生成随机点,这些点位于给定线的上方或下方。例如,如果线是y = x,我想在图的左上角(线上方)生成一个点列表,并在图的右下方(线下方)生成一个点列表。这是一个例子,其中点高于或低于y = 5:
import random
import matplotlib.pyplot as plt
num_points = 10
x1 = [random.randrange(start=1, stop=9) for i in range(num_points)]
x2 = [random.randrange(start=1, stop=9) for i in range(num_points)]
y1 = [random.randrange(start=1, stop=5) for i in range(num_points)]
y2 = [random.randrange(start=6, stop=9) for i in range(num_points)]
plt.scatter(x1, y1, c='blue')
plt.scatter(x2, y2, c='red')
plt.show()
然而,我独立地生成了x和y点,这限制了我的方程式,其中y = c(其中c是常数)。如何将其扩展为任何y = mx + b?
答案 0 :(得分:1)
有许多方法可行,但如果你的唯一要求是它们高于和低于y = mx + b线,那么你可以简单地将随机x值插入等式中,然后加或减一个随机y值
import random
import matplotlib.pyplot as plt
slope = 1
intercept = 0
def ymxb(slope, intercept, x):
return slope * x + intercept
num_points = 10
x1 = [random.randrange(start=1, stop=9) for i in range(num_points)]
x2 = [random.randrange(start=1, stop=9) for i in range(num_points)]
y1 = [ymxb(slope, intercept, x) - random.randrange(start=1, stop=9) for x in x1]
y2 = [ymxb(slope, intercept, x) + random.randrange(start=1, stop=9) for x in x2]
plt.scatter(x1, y1, c='blue')
plt.scatter(x2, y2, c='red')
plt.show()
看起来像这样:
答案 1 :(得分:1)
您可以将var er = rep.replace(/\s*,\s*/g, " 0:00AM , ");
和y1
的停止和起始限制更改为您想要的行。您需要确定飞机的终点(设置y2
和lower
)。
注意这只适用于整数。如果您想要更复杂的东西,可以使用截断的多变量分布。
upper
答案 2 :(得分:1)
你也可以得到我的答案。
这种方式将高斯噪声置于线上方和下方。我故意将噪音的平均值设置为20,以便它从线上突出,即y = 10 * x + 5.你可能会将平均值设为零。
>>> import random
>>> def y(x, m, b):
... return m*x + b
...
>>> import numpy as np
>>> X = np.linspace(0, 10, 100)
>>> y_above = [y(x, 10, 5) + abs(random.gauss(20,5)) for x in X]
>>> y_below = [y(x, 10, 5) - abs(random.gauss(20,5)) for x in X]
>>> import matplotlib.pyplot as plt
>>> plt.scatter(X, y_below, c='g')
>>> plt.scatter(X, y_above, c='r')
>>> plt.show()
这是情节。
答案 3 :(得分:0)
(x,y)的边由y - mx - b
的符号定义。例如,您可以阅读它here。
import random
import matplotlib.pyplot as plt
num_points = 50
x = [random.randrange(start=1, stop=9) for i in range(num_points)]
y = [random.randrange(start=1, stop=9) for i in range(num_points)]
m = 5
b = -3
colors = ['blue' if y[i] - m * x[i] - b > 0 else 'red' for i in range(num_points) ]
plt.plot([0, 10], [b, 10 * m + b], c='green')
plt.xlim((0, 10))
plt.ylim((0, 10))
plt.scatter(x, y, c=colors)
plt.show()