我正在尝试使用以下代码从Python中的NetCDF文件创建一个箭袋图:
import matplotlib.pyplot as plt
import numpy as np
import netCDF4 as Dataset
ncfile = netCDF4.Dataset('30JUNE2012_0300UTC.cdf', 'r')
dbZ = ncfile.variables['MAXDBZF']
data = dbZ[0,0]
U = ncfile.variables['UNEW'][:]
V = ncfile.variables['VNEW'][:]
x, y= np.arange(0,2*np.pi,.2), np.arange(0,2*np.pi,.2)
X,Y = np.meshgrid(x,y)
plt.quiver(X,Y,U,V)
plt.show()
我收到以下错误
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-109-b449c540a7ea> in <module>()
11 X,Y = np.meshgrid(x,y)
12
---> 13 plt.quiver(X,Y,U,V)
14
15 plt.show()
/Users/felishalawrence/anaconda/lib/python2.7/site-packages/matplotlib/pyplot.pyc in quiver(*args, **kw)
3152 ax.hold(hold)
3153 try:
-> 3154 ret = ax.quiver(*args, **kw)
3155 draw_if_interactive()
3156 finally:
/Users/felishalawrence/anaconda/lib/python2.7/site-packages/matplotlib/axes/_axes.pyc in quiver(self, *args, **kw)
4162 if not self._hold:
4163 self.cla()
-> 4164 q = mquiver.Quiver(self, *args, **kw)
4165
4166 self.add_collection(q, autolim=True)
/Users/felishalawrence/anaconda/lib/python2.7/site-packages/matplotlib/quiver.pyc in __init__(self, ax, *args, **kw)
415 """
416 self.ax = ax
--> 417 X, Y, U, V, C = _parse_args(*args)
418 self.X = X
419 self.Y = Y
/Users/felishalawrence/anaconda/lib/python2.7/site-packages/matplotlib/quiver.pyc in _parse_args(*args)
377 nr, nc = 1, U.shape[0]
378 else:
--> 379 nr, nc = U.shape
380 if len(args) == 2: # remaining after removing U,V,C
381 X, Y = [np.array(a).ravel() for a in args]
ValueError: too many values to unpack
这个错误是什么意思?
答案 0 :(得分:1)
ValueError: too many values to unpack
是因为你的程序的379
行试图在nr
时从nc
分配两个变量U.shape
,377
将这些值赋值给的变量。
在第1
行上方查看 - 这是正确地将两个值(U.shape[0]
和nr
分配给nc
和379
,但行U.shape
只有一个U.shape
对象可以分配给两个变量。如果U.shape
中有超过2个值,则会出现此错误。很明显U.shape
实际上是一个元组。至少两个值,这意味着只要有相同数量的值分配给变量(在这种情况下为两个),此代码将按原样工作。我将打印出U.shape
的值并确定它保存了值的预期值和数量。如果U.shape
可以返回两个或更多值,那么您的代码将需要学习如何适应这一点。例如,如果您发现nr, nc, blah = U.shape
是一个元组在3个值中你需要3个变量来保存这些值:
a,b,c = ["a","b","c"] #works
print a
print b
print c
a, b = ["a","b","c"] #will result in error because 3 values are trying to be assigned to only 2 variables
请考虑以下事项:
a
b
c
Traceback (most recent call last):
File "None", line 7, in <module>
ValueError: too many values to unpack
以上代码的结果:
{{1}}
所以你看到它只是有足够的值来分配给请求值的所有变量。
答案 1 :(得分:0)
可能更有用的解决未来的问题,而不是作者,但仍然: 问题可能是netcdf文件有时间维度,因此U和V是3维数组 - 您应该选择时间片或在时间维度上聚合数据。