python - 一定范围内的散点图 - python
问题描述
本质上,我需要制作一个从 (0,1) 到 (0,1) 的方形散点图。以原点为中心的四分之一圆内的点需要涂成红色,外面的点需要涂成蓝色。我计划这样做的方法是在同一张图上制作 2 个散点图,一个 y1 = 四分之一圆下方的范围,一个 y2 = 四分之一圆上方的范围。
这是我到目前为止所拥有的:
import numpy as np
import matplotlib.pyplot as plt
x = np.random.random(500)
y1 < np.sqrt(1-x**2)
y2 > np.sqrt(1-x**2)
plt.xlim(0, 1)
plt.ylim(0, 1)
c1 = 'r'
c2 = 'b'
plt.scatter(x, y1, c=c1, cmap=plt.cm.jet)
plt.scatter(x, y2, c=c2, cmap=plt.cm.jet)
plt.axes().set_aspect(1)
plt.show()
当我应该得到这样的东西时,这段代码给了我这个情节。如果有人能告诉我如何修复我的 y1 和 y2 值,我将不胜感激。谢谢!
解决方案
IMO 您的方法并没有完全理解(假设的)主题的重点。Afaics 这是关于pi
通过(四分之一)圆及其正方形中随机分布的点的比率进行计算。
这里的重点是不以任何方式计算点坐标,而是让它们完全随机分布。之后,您可以决定使用任何基本规则或算法以您想要的任何颜色绘制它。
简而言之,这将是我的方法:
import numpy as np
import matplotlib.pyplot as plt
x = np.random.random(500)
y = np.random.random(500)
plt.xlim(0, 1)
plt.ylim(0, 1)
c = np.where(x**2 + y**2 < 1, 'r', 'b')
plt.scatter(x, y, c=c)
plt.gca().set_aspect(1)
plt.show()
为了完整起见,假设主题的示例:
for i in range(1,9):
x = np.random.random(10**i)
y = np.random.random(10**i)
d = np.where(x**2 + y**2 < 1, 1, 0)
print(f'{10**i:>9} points: {4*np.sum(d)/d.size}')
# 10 points: 2.8
# 100 points: 3.08
# 1000 points: 3.076
# 10000 points: 3.1556
# 100000 points: 3.14456
# 1000000 points: 3.141884
# 10000000 points: 3.142634
# 100000000 points: 3.14158668
推荐阅读
- android - 格式为“rtsp://ip:port”的 Exoplayer RTSP url 无法显示预览
- python - 是否可以在 NumPy 中在没有循环的情况下逐行索引另一个二维数组?
- javascript - 在Javascript中计算对象数组的多个总和
- python - 对具有混合数据类型和相似度阈值的行进行分组
- python - 类型错误:decompress() 缺少 1 个必需的位置参数:'input_path'
- discord - discord.py 无法从本地文件嵌入图像
- html - 处理卡溢出文本
- python - 我无法弄清楚如何在用户 DND 状态计数器循环中从 json 获取公会 ID 和频道 ID
- python - 如何找到一个数据框列的最接近值并返回其他数据框的列值和位置
- javascript - 测试 id 不应该在响应正文中