Python:numpy与matplotlib异常

1 投票
3 回答
1314 浏览
提问于 2025-04-16 04:49

这是我第一次使用matplotlib和numpy。

下面是我遇到的问题:

如果我在Python命令行里运行,代码可以正常工作。这个代码是:

>>> from numpy import *
>>> y = array([1,2])
>>> y = append(y, y[len(y) - 1]+1)
>>> y
array([1, 2, 3])

但是如果我在脚本中使用matplotlib,就会出现这个错误。

line 26, in onkeypress
y = append(y, y[len(y) - 1]+1)
UnboundLocalError: local variable 'y' referenced before assignment

这是我的脚本:

from matplotlib.pyplot import figure, show
from numpy import *
figzoom = figure()
axzoom = figzoom.add_subplot(111, xlim=(0,10), ylim=(0, 10),autoscale_on=True)
x = array([1, 2  ])
y = array([1, 10 ])
def onkeypress(event):
    if event.key == "up":
        y = append(y, y[len(y) - 1]+1)
        x = append(x, x[len(x) - 1]  )
        axzoom.plot(x,y)

我试着把数据“添加”到另一个数组,比如y1,然后用y = y1.copy()来复制。但是我还是遇到同样的错误。我是不是漏掉了什么简单的东西???!!!

3 个回答

2

除非你在你的 onkeypress() 函数里加上 global y,否则你在函数里使用的 y 只是这个函数内部的一个局部变量。也就是说,你在定义这个局部变量的时候,不能在赋值语句的右边使用 y

2

如果你把这些变量改成全局变量,可能就能正常工作了。

def onkeypress(event):
    global y, x
    ...
3

当你在一个函数里面给一个变量赋值时,Python 会创建一个新的变量,这个变量的作用范围是局部的,也就是说它只在这个函数里面有效。而这个新的变量会把全局变量给“遮住”。

所以,在 onkeypress 函数里面的 x 和 y 只是这个函数内部的变量。从 Python 的角度来看,它们是没有被初始化的,所以就会出现错误。

正如 GWW 提到的,声明 x 和 y 为全局变量就能解决这个问题。另外,如果你没有给 x 和 y 赋新的值,而只是使用它们之前的值,那么这些值就会指向全局的 x 和 y。

撰写回答