绘制箭头功能

时间:2015-01-27 21:22:33

标签: python

我正在尝试使用以下代码从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

这个错误是什么意思?

2 个答案:

答案 0 :(得分:1)

ValueError: too many values to unpack是因为你的程序的379行试图在nr时从nc分配两个变量U.shape377将这些值赋值给的变量。

在第1行上方查看 - 这是正确地将两个值(U.shape[0]nr分配给nc379,但行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维数组 - 您应该选择时间片或在时间维度上聚合数据。