如何用Cartopy绘制洋流图

问题描述 投票:0回答:1

[我试图从一个项目的NASA数据库中绘制一个包含洋流的netCDF4文件,但是我不断收到诸如“ x和y坐标与矢量分量的形状不兼容”之类的错误。

我曾尝试将流图更改为contourf(当我说它需要是一个2d数组时,我试图对其进行更改,但无法使其正常工作。

import os
import matplotlib.pyplot as plt
from netCDF4 import Dataset as netcdf_dataset
import numpy as np
import cartopy.crs as ccrs

fname = "oscar_vel2019.nc.gz.nc"

data=netcdf_dataset(fname)
v = data.variables['v'][0, :, :, :]
vf = data.variables['vm'][0, :, :, :]
u = data.variables['u'][0, :, :, :]
uf = data.variables['um'][0, :, :, :]
lats = data.variables['latitude'][:]
lons = data.variables['longitude'][:]
ax = plt.axes(projection=ccrs.PlateCarree())

mymap=plt.streamplot(lons, lats, u, v, 60, transform=ccrs.PlateCarree())

ax.coastlines()

plt.show()

我希望它能使海流在图上可见,并通过动画显示海流中粒子的运动。我真的对此并不了解,这就是我要问的原因。这是我从中获取文件的链接:https://podaac-opendap.jpl.nasa.gov/opendap/hyrax/allData/oscar/preview/L4/oscar_third_deg/oscar_vel2019.nc.gz.html

python-3.x matplotlib cartopy netcdf4
1个回答
0
投票
确定,我下载了数据。问题是u和v是4维的,因此您需要挤出“深度”维。 Cartopy也不接受大于180的经度,并且您可能无法摆脱用流绘制整个事物的麻烦。而且,密度= 60将永远占用...

这很丑,但是给你这个主意。

import xarray as xr import numpy as np import cartopy.crs as ccrs import matplotlib.pyplot as plt with xr.open_dataset('/Users/jklymak/downloads/oscar_vel2019.nc.gz.nc') as ds: print(ds) ax = plt.axes(projection=ccrs.PlateCarree()) dec = 10 lon = ds.longitude.values[::dec] lon[lon>180] = lon[lon>180] - 360 mymap=plt.streamplot(lon, ds.latitude.values[::dec], ds.u.values[0, 0, ::dec, ::dec], ds.v.values[0, 0, ::dec, ::dec], 6, transform=ccrs.PlateCarree()) ax.coastlines() plt.show()
enter image description here
© www.soinside.com 2019 - 2024. All rights reserved.