如何用R的ggplot在圆内生成无中心聚类的随机散点
问题原因
你遇到的圆心聚集问题是极坐标随机点生成的经典误区:直接对半径r取runif(n)会导致单位面积内的点密度和r成反比——圆心附近的环带面积更小,相同数量的点落在小面积区域自然会看起来更聚集。
修复方案
仅需修改半径生成逻辑即可,因为圆的面积和半径平方成正比,对均匀随机值开平方后能让点在单位面积上的分布概率一致,从根源消除中心聚集问题。
将你代码中生成半径的代码行:
r <- runif(n)
修改为:
r <- sqrt(runif(n))
其余代码无需调整,运行后即可得到符合预期的圆内均匀随机散点效果。
错误方案说明
你之前尝试单独对x、y坐标使用sample()打乱的方法不可行:sample()会破坏原始(半径, 角度)对的匹配关系,拆分重排后的x和y不再满足x² + y² ≤ 1的圆内约束,因此会出现散点超出圆周、呈十字分布的异常效果。
内容的提问来源于stack exchange,提问作者Emman
相关产品推荐
相关产品推荐

