You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Matplotlib在圆内绘制任意数量符合指定概率分布的随机点

实现批量生成坐标并一次性绘制的方案

现有代码问题梳理

  • 缺失math库导入,调用math.pi、三角函数时会直接报错
  • 生成单坐标的逻辑和绘图逻辑耦合,每次生成点都会新建画布,无法批量绘制
  • 轴范围设置错误:plt.axis([0,0,0,0])会将可视范围锁死在原点,无法正常显示圆和坐标点
  • 半径校验逻辑冗余:random.random()返回值范围是[0,1),两个相加后r范围是[0,2),不可能小于0,r <= -1的判断可以直接删除

修改实现步骤

  1. 抽离单坐标生成逻辑为独立函数,方便循环调用
  2. 先批量生成X组坐标存入列表,统一完成所有绘图准备后再一次性渲染
  3. 修正坐标轴范围为[-1.2, 1.2],适配直径为2的圆的显示,同时设置等比例缩放避免圆变形
  4. 批量绘制所有点,避免重复创建画布

完整可运行代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:09:02