首页 > 解决方案 > 一定范围内的散点图 - 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 值,我将不胜感激。谢谢!

标签: pythonrangescatter-plot

解决方案


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

推荐阅读