4

以下は、netCDF ファイルによって表示される変数です。 1

netCDF ファイルを使用して地中海の表層海流を描画するために、次のコードを作成しました。

import netCDF4
from netCDF4 import Dataset
import datetime as dt
import numpy as np
import numpy.ma as ma
from datetime import date, datetime, timedelta
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

nc=Dataset('datasets/essai.nc')

y = nc.variables['g0_lat_1']
y = np.array(y)

x = nc.variables['g0_lon_2']
x = np.array(x)

u = nc.variables['UOGRD_GDS0_DBSL']
u = np.array(u)
u = u[0, :, :]
u = np.deg2rad(u)

v = nc.variables['VOGRD_GDS0_DBSL']
v = np.array(v)
v = v[0, :, :]
v = np.deg2rad(v)

y, x = np.meshgrid(y,x)

plt.quiver(x [::10], y[::10], u[::10], v[::10], pivot='tail')
plt.show()

これは私にこれを与えます:

ズームインすると、矢印と点があることがわかります。 ここに画像の説明を入力 まず、点が何を意味するのかわかりません。海岸線が想像できません。すると、私の矢はすべて同じ方向に向かいます!だから私はフォーラムでこのコードを見つけました:

# Calculate positions of vectors on map projection 
y, x = np.meshgrid(lat,lon)

# Calculate the orientation of the vectors
x1, y1 = m(lon+u, lat+v)
u_map, v_map = x1-x, y1-y

# Rescale the magnitudes of the vectors...
mag_scale = np.hypot(u_map, v_map) / np.hypot(u, v)
u_map /= mag_scale
v_map /= mag_scale

m.quiver(x, y, u_map, v_map)
plt.show()

しかし、それは私に矢だけを返します。アイデアはありますか?

4

1 に答える 1

0

データに合わせて以下のコードを変更してみてください。また、ベースマップのWeb サイトに役立つ例があります。ただし、これらのプロットが公開を目的としている場合は、気象/海洋データをプロットするためのツールが豊富にあるnclを使用する方がよい場合があります。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

x = np.linspace(-10, 40, 10)
y = np.linspace(25, 45, 10)
lons, lats = np.meshgrid(x, y)

u = np.random.random(np.shape(lons))
v = np.random.random(np.shape(lats))


m = Basemap(llcrnrlon=-10.,llcrnrlat=25.,urcrnrlon=40.,urcrnrlat=45.,
            lon_0=10., lat_0=35,
            projection='lcc', resolution ='l')

m.drawcoastlines()

X,Y = m(lons,lats)
m.quiver(X,Y,u,v)

plt.show()
于 2015-03-16T15:16:26.937 に答える