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

まずはサイトへようこそ。とはいえ、この質問は、GIS というよりもデータのプロットに関するものであるため、標準の StackExchange サイトの方が適していると思います。それでも、喜んでお手伝いします:)

quiver プロットのドキュメントを見ると、次のようになります。

  • すべての引数は 1D または 2D の場合があります
  • X と Y が 1D で U と V が 2D で、X と Y の長さが U と V の行と列の長さと同じである場合、それらはメッシュグリッドとして展開されます。そうしないとエラーになる
  • データを簡単に確認したいだけなら、実際には X 配列と Y 配列は必要ありません。

現在行っているスライスでは、最初の次元の各配列で5番目ごとの値を取得しています。緯度と経度が 1 次元配列であると仮定すると、緯度と経度の値が 5番目ごとに取得されます。UOGRD と VOGRD は 5番目 の列ごとに取得する 2 次元配列であるため、緯度と経度から拡張するのに十分な行がないことを意味します。

やるべきことのいくつか:

  • 緯度と経度なしでQuiverをプロットして、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 に答える