【问题标题】:Plotting gridded data with cartopy using NorthPolarStereo使用 NorthPolarStereo 绘制带有 cartopy 的网格数据
【发布时间】:2020-06-11 14:34:25
【问题描述】:

我正在从 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 输出:

具有相同数据的底图输出:

【问题讨论】:

    标签: python matplotlib-basemap cartopy


    【解决方案1】:

    如果您的数据坐标是纬度和经度,则需要使用 PlateCarree 变换:

    plt.pcolormesh(lon, lat, field,zorder=2, transform=ccrs.PlateCarree())
    

    变换描述数据坐标并且独立于您要绘制的投影。有关更多详细信息,请参阅 Cartopy 文档中的此指南https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html

    【讨论】:

      猜你喜欢
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2019-02-07
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多