(matpolotlib)ValueError:要解压缩的值太多

时间:2015-07-29 14:24:49

标签: python unix numpy matplotlib scipy

尝试显示数据值而非标记时出现以下错误:

完成追溯:

Traceback (most recent call last):
File "plotpoints.py", line 45, in <module>
plt.annotate(grid_x,grid_y)
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 3405, in annotate
ret = gca().annotate(*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 3404, in annotate
a = mtext.Annotation(*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/text.py", line 1813, in __init__
annotation_clip=annotation_clip)
File "/usr/lib/pymodules/python2.7/matplotlib/text.py", line 1442, in __init__
x, y = self.xytext = xytext
ValueError: too many values to unpack

代码:

m = mapformat()

dx = 0.25

grid_x, grid_y = np.mgrid[-85:64:dx, 34:49:dx]

grid_z = griddata((data[:,1],data[:,0]), data[:,2], (grid_x,grid_y), method='linear')

x,y = m(data[:,1], data[:,0]) # flip lat/lon

grid_x,grid_y = m(grid_x,grid_y)

plt.annotate(grid_x,grid_y)

#m.plot(grid_x,grid_y, 'ko', markersize=2)

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为您没有正确地呼叫annotate

plt.annotate(grid_x,grid_y)

看起来像2个数组或点列表(我还没有完全推断出你如何定义这两个变量)。

但文档是:

ax.annotate('local max', xy=(3, 1),  ...)

第一个参数是文本,第二个参数是带坐标的元组。

我猜测调用序列会将您的xgrid参数转换为mtext,将ygrid转换为xytext

x, y = self.xytext = xytext

如果ygrid中的值超过2个,则此解包将产生错误。

annotate在剧情的特定点添加文字;它不能用于标记一堆数据点的坐标(至少不能在一次调用中)。

答案 1 :(得分:0)

您在右侧调用的函数之一是返回的值多于左侧要分配的变量。

例如,如果您在REPL中执行以下操作:

a,b = [1,2,3]

您将收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

它有助于查看代码失败的行 - 这样,您就会知道哪个函数返回了太多变量。