3

所以这是我的代码:

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

http://www.imgjoe.com/x/microsofprp.jpg

4

1 回答 1

0

首先,欢迎来到本站。也就是说,我认为这个问题在标准 StackExchange 站点上可能会更好,因为它更多地是关于绘制数据而不是 GIS。不过,很乐意提供帮助:)

查看quiver plot的文档,我们得到以下信息:

  • 所有参数都可以是 1D 或 2D
  • 如果 X 和 Y 是 1D 并且 U 和 V 是 2D 并且 X 和 Y 的长度与 U 和 V 的行和列的长度相同,那么它们将被扩展为网格网格。不然会报错
  • 如果您只想快速查看数据,则实际上不需要 X 和 Y 数组

通过您当前正在进行的切片,您将在第一维的每个数组中获得每 5值。假设 lat 和 lon 是一维数组,那么您将获得每 5lat 和 lon 值。由于 UOGRD 和VOGRD 是二维数组,您每 5得到一次,这意味着您的纬度和经度中没有足够的行来扩展。

几件事要做:

  • 绘制没有纬度和经度的箭袋,看看你的 UOGRD 和 VOGRD 是什么样子(我怀疑它会是一个矩形):
plt.quiver(uin[::5], vin[::5], scale=200)
  • 查看所有数组的大小,并确保有足够的行和列值。
print lon[::5].shape, lat[::5].shape, uin[::5].shape, vin[::5].shape
  • 如果您只想绘制每 5值,请在绘图的两个维度上对 UOGRD 和 VOGRD 数组进行切片。
plt.quiver(lon[::5], lat[::5], uin[::5, ::5], vin[::5, ::5], scale=200)

希望这可以帮助!

于 2013-07-05T06:26:36.127 回答