Python:numpy 和 matplotlib 异常

标签 python numpy matplotlib

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

问题来了:

如果我转到 python cli,预期的代码可以正常工作。这是代码

>>> 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()。但我仍然遇到同样的错误。我一定在这里遗漏了一些微不足道的东西???!!!

最佳答案

当你在一个函数中赋值给一个变量时,python 会创建一个具有局部作用域的新变量,这个新变量也会隐藏全局变量。

因此,onkeypress 中的 x 和 y 是函数的局部值。因此,从 Python 的角度来看,它们是未初始化的,因此是错误的。

正如 GWW 指出的那样 - 将 x, y 声明为全局将解决问题。此外,如果您不为 x、y 分配任何新值,而仅使用它们以前存在的值,则这些值将引用全局 x、y。

关于Python:numpy 和 matplotlib 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3833717/

相关文章:

python - 在不添加额外列的情况下创建颜色基于年份的散点图

python - 根据列表值选择 Pandas 行

python - Python sklearn 中的训练集

python - 移位和零填充子列表,导致我不明白的操作/广播运行时错误

numpy - allclose - 如何在 Julia 中检查两个数组是否接近

python - 如何删除在 Matplotlib 中使用鼠标悬停事件创建的绘图线?

python - 在 matplotlib 中结合对数和线性刻度

python - 如何使用命名的 paramstyle 占位符在带有 % 通配符的 python 变量上使用 SQL LIKE 运算符

python - 使用 numpy 和/或 cv2 在深度图中找到最暗的区域

python - 如何增加matplotlib “table” plot的高度