[英]How to scatter plot two concentric circles with Numpy and Matplotlib
每个人! 我正在尝试使用Numpy和Matplotlib作为问题的一部分重新创建以下内容,但我正在努力获得 plot 的“随机方面”:
我已经设法使用以下代码创建了两个圆圈和 plot 它们:
import numpy as np
import matplotlib.pyplot as plt
r = [5, 10]
angle = np.linspace(0, 2 * np.pi, 100)
X = [r[0] * np.cos(angle), r[1] * np.cos(angle)]
Y = [r[0] * np.sin(angle), r[1] * np.sin(angle)]
plt.axis('equal');
plt.scatter(X[0], Y[0], c='purple');
plt.scatter(X[1], Y[1], c='yellow');
但我不知道如何让它们得到这种随机散射,就像在示例图像中一样。 我知道我需要使用 Numpy 的随机数生成,但我不知道如何或在哪里使用它。
你可能需要超过 100 分,所以让我们说
t = np.linspace(0, 2 * np.pi, 1000, endpoint=False)
您对如何构建圆有正确的想法,因此为每个点添加一个随机半径:
r = np.random.uniform([[4], [9]], [[6], [11]], size=(2, 1000))
这不一定是最好的方法,因为这些点会偏向中心,但这足以说明这个想法。
plt.scatter(r[0] * np.cos(t), r[0] * np.sin(t))
plt.scatter(r[1] * np.cos(t), r[1] * np.sin(t))
在对图像进行第二次检查时,您可能希望将np.random.uniform
替换为np.random.normal
,标准差为 1。
您只需为半径添加随机性(根据用户设置的限制)。
import numpy as np
import matplotlib.pyplot as plt
# r_start = [5, 10] make the radius random (any distribution)
r = np.random.uniform([[4.5], [9.5]], [[5.5], [10.5]], size=(2, 100))
angle = np.linspace(0, 2 * np.pi , 100 )
X = [r[0] * np.cos(angle), r[1] * np.cos(angle)]
Y = [r[0] * np.sin(angle), r[1] * np.sin(angle)]
plt.axis('equal')
plt.scatter(X[0], Y[0], c='purple')
plt.scatter(X[1], Y[1], c='yellow')
plt.show()
例如 output:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.