繁体   English   中英

如何用 Numpy 和 Matplotlib 分散 plot 两个同心圆

[英]How to scatter plot two concentric circles with Numpy and Matplotlib

每个人! 我正在尝试使用NumpyMatplotlib作为问题的一部分重新创建以下内容,但我正在努力获得 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM