如何使用Matplotlib在圆内绘制任意数量符合指定概率分布的随机点
实现批量生成坐标并一次性绘制的方案
现有代码问题梳理
- 缺失
math库导入,调用math.pi、三角函数时会直接报错 - 生成单坐标的逻辑和绘图逻辑耦合,每次生成点都会新建画布,无法批量绘制
- 轴范围设置错误:
plt.axis([0,0,0,0])会将可视范围锁死在原点,无法正常显示圆和坐标点 - 半径校验逻辑冗余:
random.random()返回值范围是[0,1),两个相加后r范围是[0,2),不可能小于0,r <= -1的判断可以直接删除
修改实现步骤
- 抽离单坐标生成逻辑为独立函数,方便循环调用
- 先批量生成X组坐标存入列表,统一完成所有绘图准备后再一次性渲染
- 修正坐标轴范围为[-1.2, 1.2],适配直径为2的圆的显示,同时设置等比例缩放避免圆变形
- 批量绘制所有点,避免重复创建画布
完整可运行代码
import random import math import matplotlib.pyplot as plt # 抽离单个符合线性概率分布的坐标生成逻辑 def generate_point(): theta = random.random() * 2 * math.pi r = random.random() + random.random() if r >= 1: r = 2 - r x = r * math.cos(theta) y = r * math.sin(theta) return x, y def draw_multiple_points(point_num=100): # point_num就是所需的X组坐标数量,可自行修改 # 批量生成所有点 x_list = [] y_list = [] for _ in range(point_num): x, y = generate_point() x_list.append(x) y_list.append(y) # 初始化画布和参考圆 fig, ax = plt.subplots() circle1 = plt.Circle((0, 0), 1, color='blue', fill=False) ax.add_patch(circle1) # 一次性绘制所有随机点+圆心标记 plt.plot(x_list, y_list, 'ro') plt.plot([0], [0], 'ro') # 设置坐标轴参数 ax.set_aspect('equal', adjustable='box') plt.axis([-1.2, 1.2, -1.2, 1.2]) plt.show() # 示例:生成200个点绘制 draw_multiple_points(point_num=200)
参数调整说明
如果需要修改生成的点数量,直接修改draw_multiple_points调用时的point_num参数即可,比如要生成500个点就改为draw_multiple_points(point_num=500)。
内容的提问来源于stack exchange,提问作者Agent 9
相关产品推荐
相关产品推荐

