2

所以这是我的代码:

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 的样子:UOGRD

Forecast_time 最多可达 4 的数量。

好的,所以我使用了 np.array 和 shape 函数,这就是我所拥有的:

C:\Python27>python nctry.py (321,) //lat (720,) //lon (4, 321, 720) //uogrd (4, 321, 720) //vogrd

然后我尝试了这段代码:

代码

但它只显示一个箭头。你能告诉我为什么吗?

所以现在我有一些看起来像这样的模型: 电流模型化

但是这个图像没有改变,对于 [0, :, :], 1, 2 or 3.. 有什么问题?此外,所有的箭头都指向同一个方向,当我们谈论洋流的海洋时,这并不是真的。我使用 deg2rad 函数。最后,我无法想象海岸线,这正常吗?谢谢

4

1 回答 1

2

问题是UOGRD(也可能VOGRD)包含太多维度。您需要通过切片来减少维数。但是,鉴于目前的信息,我无法指导您删除哪个维度。

但是,您应该使用该命令将latlon和转换为UOGRD并打印出每个数组的形状VOGRDnp.array

UOGRD = np.array(UOGRD)
print UOGRD.shape

对所有 4 个阵列执行此操作。这将打印出元组(d1_length, d2_length, ..., dn_length)

如果我们知道 和 的维度lat=Nlon=M我们应该希望 的维度UOGRD类似于(N, M, x, y, z)并且我们可以切出我们不需要的维度。

编辑:

从您的形状函数中,它向我们展示了uin并且vin都是 3 维的。你可以看到len(lat) = 321len(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,:,:]

于 2013-07-03T15:06:07.127 回答