使用 NorthPolarStereo 用 cartopy 绘制网格化数据
Plotting gridded data with cartopy using NorthPolarStereo
我正在从 Basemap 移动到 Cartopy,并想绘制覆盖极点的北冰洋数据。
我决定使用 NorthPolarStereo() 投影并且很乐意使用 pcolormesh 或 contourf。不幸的是,当我执行以下代码时,我的数据字段没有显示:
import cartopy.crs as ccrso
from netCDF4 import Dataset
def import_envisat_field(year,
month):
data_dir = f'/media/robbie/Seagate Portable Drive/Envisat_thickness/{year}/'
file = f'ESACCI-SEAICE-L3C-SITHICK-RA2_ENVISAT-NH25KMEASE2-{year}{month}-fv2.0.nc'
data = Dataset(data_dir+file)
return(data)
# Import data
data = import_envisat_field("2003","02")
# Make plot
fig = plt.figure(figsize=[10, 5])
ax = plt.axes(projection=ccrs.NorthPolarStereo())
ax.add_feature(cartopy.feature.OCEAN, zorder=0)
ax.add_feature(cartopy.feature.LAND, zorder=1, edgecolor='black')
extent = 2500000
ax.set_extent((-extent,
extent,
-extent,
extent),
crs=ccrs.NorthPolarStereo())
ax.gridlines()
lon = np.array(data['lon'])
lat = np.array(data['lat'])
field = np.array(data['sea_ice_thickness'])[0]
print(lon.shape,lat.shape,field.shape)
# This print command gives (432, 432) (432, 432) (432, 432)
plt.pcolormesh(lon, lat, field,zorder=2,
transform=ccrs.NorthPolarStereo())
plt.show()
使用 Basemap 以简单的方式绘制数据,但是执行上面的代码只给我一张北冰洋的漂亮图片,但上面没有我的数据。
我也试过用 ax.pcolormesh 替换 plt.pcolormesh 但这也没有用。
Cartopy 输出:
具有相同数据的底图输出:
如果您的数据坐标是纬度和经度,则需要使用 PlateCarree 变换:
plt.pcolormesh(lon, lat, field,zorder=2, transform=ccrs.PlateCarree())
转换描述了数据坐标并且独立于您想要绘制的投影。有关详细信息,请参阅 Cartopy 文档中的本指南 https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html
我正在从 Basemap 移动到 Cartopy,并想绘制覆盖极点的北冰洋数据。
我决定使用 NorthPolarStereo() 投影并且很乐意使用 pcolormesh 或 contourf。不幸的是,当我执行以下代码时,我的数据字段没有显示:
import cartopy.crs as ccrso
from netCDF4 import Dataset
def import_envisat_field(year,
month):
data_dir = f'/media/robbie/Seagate Portable Drive/Envisat_thickness/{year}/'
file = f'ESACCI-SEAICE-L3C-SITHICK-RA2_ENVISAT-NH25KMEASE2-{year}{month}-fv2.0.nc'
data = Dataset(data_dir+file)
return(data)
# Import data
data = import_envisat_field("2003","02")
# Make plot
fig = plt.figure(figsize=[10, 5])
ax = plt.axes(projection=ccrs.NorthPolarStereo())
ax.add_feature(cartopy.feature.OCEAN, zorder=0)
ax.add_feature(cartopy.feature.LAND, zorder=1, edgecolor='black')
extent = 2500000
ax.set_extent((-extent,
extent,
-extent,
extent),
crs=ccrs.NorthPolarStereo())
ax.gridlines()
lon = np.array(data['lon'])
lat = np.array(data['lat'])
field = np.array(data['sea_ice_thickness'])[0]
print(lon.shape,lat.shape,field.shape)
# This print command gives (432, 432) (432, 432) (432, 432)
plt.pcolormesh(lon, lat, field,zorder=2,
transform=ccrs.NorthPolarStereo())
plt.show()
使用 Basemap 以简单的方式绘制数据,但是执行上面的代码只给我一张北冰洋的漂亮图片,但上面没有我的数据。
我也试过用 ax.pcolormesh 替换 plt.pcolormesh 但这也没有用。
Cartopy 输出:
具有相同数据的底图输出:
如果您的数据坐标是纬度和经度,则需要使用 PlateCarree 变换:
plt.pcolormesh(lon, lat, field,zorder=2, transform=ccrs.PlateCarree())
转换描述了数据坐标并且独立于您想要绘制的投影。有关详细信息,请参阅 Cartopy 文档中的本指南 https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html