所以这是我的代码:
from netCDF4 import *
import datetime as dt
import numpy as np
import numpy.ma as ma
from datetime import date, datetime, timedelta
import matplotlib.pyplot as plt
nc=Dataset('datasets/essai.nc')
time_var = nc.variables[str('forecast_time0')]
wave_var = nc.variables['DIST_GDS0_SFC']
lat = nc.variables['g0_lat_1'][:]
lon = nc.variables['g0_lon_2'][:]
uin = nc.variables['UOGRD_GDS0_DBSL'][:]
vin = nc.variables['VOGRD_GDS0_DBSL'][:]
plt.quiver(lon[::5], lat[::5], uin[::5], vin[::5], scale=200)
这是我得到的错误:
Traceback (most recent call last):
File "nctry.py", line 37, in <module>
plt.quiver(lon[::5], lat[::5], uin[::5], vin[::5], scale=200)
File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 2877, in quive
r
ret = ax.quiver(*args, **kw)
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 6627, in quiver
q = mquiver.Quiver(self, *args, **kw)
File "C:\Python27\lib\site-packages\matplotlib\quiver.py", line 394, in __init
__
X, Y, U, V, C = _parse_args(*args)
File "C:\Python27\lib\site-packages\matplotlib\quiver.py", line 356, in _parse
_args
nr, nc = U.shape
ValueError: too many values to unpack
我认为问题出在UOGRD和VOGRD,它们具有很多价值,但不知道如何操作?
这是uogrd的样子:
预测时间最多为4。
好的,所以我使用了np.array和shape函数,这是我得到的:
C:\ Python27> python nctry.py
(321,)// lat
(720,)// lon
(4,321,720)// uogrd
(4,321,720)// vogrd
然后我尝试了这段代码:
但只显示一个箭头。你能告诉我为什么吗?
所以现在我有了一些看起来像这样的建模:
但是此图像不会更改,对于[0,:,:],1、2或3。出了什么问题?
此外,所有的箭头都朝着相同的方向,当我们谈论洋流的海洋时,并不是真的如此。我使用deg2rad函数。
最后,我无法想象海岸线,这正常吗?
谢谢
最佳答案
问题是UOGRD
(可能还有VOGRD
)包含太多维。您需要通过切片来减少尺寸数量。但是,鉴于当前信息,我无法指示您删除哪个尺寸。
但是,应该使用命令将lat
,lon
,UOGRD
和VOGRD
转换为np.array
,并打印出每个数组的形状
UOGRD = np.array(UOGRD)
print UOGRD.shape
对所有四个阵列执行此操作。这将打印出元组
(d1_length, d2_length, ..., dn_length)
。如果我们知道
lat=N
和lon=M
的尺寸,我们应该希望UOGRD
的尺寸类似于(N, M, x, y, z)
,并且可以切出不需要的尺寸。编辑:
从您的形状函数中可以看出,
uin
和vin
都是3维的。您会看到len(lat) = 321
,len(lon) = 720
以及uin
和vin
的尺寸均为(x, 321, 720)
。这意味着我们要绘制uin
和vin
的最后两个维度。因此,请尝试uin = nc.variables['UOGRD_GDSO_DBSL']
uin = np.array(uin)
uin = uin[0, :, :]
vin = nc.variables['vOGRD_GDSO_DBSL']
vin = np.array(vin)
vin = vin[0, :, :]
不要执行
uin = uin.shape
,因为那样会设置uin = (4, 321, 720)
,而不是数据。唯一的是,我们必须弄清楚应该在切片中放入哪个索引。尝试先[0,:,:]
然后[1,:,:]
... [3,:,:]
。关于python - 在 map 上绘制当前数据:值太多,无法解包错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17428435/