我希望根据每个数据点到中心的给定距离,在中心(2.5,2.5)周围散布许多数据点。我如何做到这一点,同时也避免重复/将它们均匀地分布在中心?
提前感谢
发布于 2020-05-27 22:24:53
为了澄清,我希望每个距离都有一个点,然后下一个点偏移180度或90度。但我还是根据古斯塔夫·拉斯穆森提供的代码完成了这项工作:
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(6, 6))
#default
N = 50
angles = np.linspace(0, 2 * np.pi, N)
c_x, c_y = (2.5, 2.5)
x_s, y_s = [], []
distances = list(np.arange(0, 5.5, 0.01))
i = angles.size/4
for distance in distances:
x_s.append(c_x + distance * np.cos(i))
y_s.append(c_y + distance * np.sin(i))
i += i
plt.scatter(x_s, y_s, c="b", s=4)
plt.show()
在这里,我们可以看到550个距离,显示的下一个距离偏移了大约90度。
最后一点:当处理偏差较大的数据集时,最好使用i = angles.size/2
,因为这样可以使输出保持一定的圆圈
发布于 2020-05-27 19:52:39
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(6, 6))
N = 120
angles = np.linspace(0, 2 * np.pi, N)
c_x, c_y = (2.5, 2.5)
x_s, y_s = [], []
distances = list(np.arange(0, 5.5, 0.5))
for distance in distances:
for angle in angles:
x_s.append(c_x + distance * np.cos(angle))
y_s.append(c_y + distance * np.sin(angle))
plt.scatter(x_s, y_s, c="b", s=4)
plt.show()
发布于 2020-05-27 21:34:02
import cmath
import numpy as np
from matplotlib import pyplot as plt
from itertools import starmap
c = np.array(list(starmap(cmath.rect, [(v//40+1, v*np.pi/20) for v in range(120)])))
x = c.real+2.5
y = c.imag+2.5
plt.scatter(x, y)
https://stackoverflow.com/questions/62051434
复制