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

Python Matplotlib绘图问题:x/y变量未识别及步长方法实现

解决随机步长可视化的变量作用域问题&两种行走模式实现

看起来你遇到了变量作用域的核心问题——函数里没法识别外部的x、y,通常是因为你没把这些变量作为参数传入函数,或者错误地依赖了全局变量。我来一步步帮你解决这个问题,同时实现你要的两种随机行走模式。


一、先搞定「函数内识别不了x/y」的问题

假设你之前的代码是类似这样的常见错误写法:

import matplotlib.pyplot as plt
import numpy as np

x = [0]
y = [0]

def draw_walk():
    # 这里直接用x、y会报错,函数默认找不到外部定义的变量
    plt.plot(x, y)
    plt.show()

draw_walk()

更规范的解决方式是通过参数传递变量(不推荐用global关键字,容易让代码逻辑混乱):

import matplotlib.pyplot as plt
import numpy as np

# 绘图函数:接收x、y路径作为参数
def draw_walk(x, y):
    plt.plot(x, y, alpha=0.5)  # alpha设小一点,100条线不会挤成一团

# 生成第一种随机行走的函数:每次随机选全新角度
def generate_random_walk(steps=100):
    x = [0]
    y = [0]
    for _ in range(steps):
        angle = np.random.uniform(0, 2*np.pi)
        dx = np.cos(angle)
        dy = np.sin(angle)
        x.append(x[-1] + dx)
        y.append(y[-1] + dy)
    return x, y

这样调用时,每次生成的x、y路径都能正确传入绘图函数,不会再出现变量找不到的问题。


二、绘制100次随机步长结果

基于上面的函数,我们循环100次生成路径,统一绘制即可:

plt.figure(figsize=(8,8))
for _ in range(100):
    walk_x, walk_y = generate_random_walk(steps=200)  # 可自定义行走步数
    draw_walk(walk_x, walk_y)

plt.title("100次随机角度行走路径")
plt.xlabel("X坐标")
plt.ylabel("Y坐标")
plt.axis('equal')  # 保证坐标轴比例一致,行走不会变形
plt.show()

三、实现第二种「朝向正态分布变化」的行走模式

这种模式的核心是:智能体不再每次随机选全新角度,而是在当前朝向的基础上,叠加一个正态分布的角度偏移。我们可以写一个专属的生成函数:

def generate_oriented_walk(steps=100, angle_std=np.pi/8):
    x = [0]
    y = [0]
    current_angle = np.random.uniform(0, 2*np.pi)  # 初始随机朝向
    for _ in range(steps):
        # 角度变化量服从均值0、标准差为angle_std的正态分布
        angle_change = np.random.normal(0, angle_std)
        current_angle += angle_change
        # 可选:将角度限制在0~2π范围内(不处理也不影响坐标计算)
        current_angle = current_angle % (2*np.pi)
        dx = np.cos(current_angle)
        dy = np.sin(current_angle)
        x.append(x[-1] + dx)
        y.append(y[-1] + dy)
    return x, y

要绘制100次这种路径,只需要替换生成函数即可:

plt.figure(figsize=(8,8))
for _ in range(100):
    # 调整angle_std可以控制转向幅度,值越小行走越“笔直”
    walk_x, walk_y = generate_oriented_walk(steps=200, angle_std=np.pi/16)
    draw_walk(walk_x, walk_y)

plt.title("100次朝向正态偏移行走路径")
plt.xlabel("X坐标")
plt.ylabel("Y坐标")
plt.axis('equal')
plt.show()

关键要点总结

  • 函数内找不到外部变量?优先用参数传递,尽量避免全局变量
  • 绘制多条路径时,用alpha降低透明度,避免线条重叠看不清
  • 第二种行走模式的核心是维护当前朝向角度,每次只做小幅度的正态偏移,而不是重新随机选角度

内容的提问来源于stack exchange,提问作者Alicia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:33:38