我想在普里兹湾画一个SIC分布,但我发现墨卡托投影的结果很奇怪。
我用
ccrs.SouthPolarStereo
和ccrs.Mercator
都画了,想要的是前者的结果,但我需要用墨卡托投影画,请问如何修改?
fig = plt.figure(figsize=[10, 5])
ax1 = fig.add_subplot(1, 2, 1, projection=ccrs.SouthPolarStereo())
fig.subplots_adjust(bottom=0.05, top=0.95,
left=0.04, right=0.95, wspace=0.02)
# Limit the map to -60 degrees latitude and below.
ax1.set_extent([-180, 180, -90, -50], ccrs.PlateCarree())
ax1.add_feature(cfeature.LAND)
cf = ax1.contourf(lon, lat, SIC[0] ,levels=np.linspace(0,1,51),cmap=cmaps.WhiteBlueGreenYellowRed,
transform=ccrs.PlateCarree(),extend='neither',transform_first=True)
ax1.gridlines()
ax2 = fig.add_subplot(1, 2, 2, projection=ccrs.Mercator())
fig.subplots_adjust(bottom=0.05, top=0.95,
left=0.04, right=0.95, wspace=0.02)
# Limit the map to -60 degrees latitude and below.
cf = ax2.contourf(lon, lat, SIC[0] ,levels=np.linspace(0,1,51),cmap=cmaps.WhiteBlueGreenYellowRed,
transform=ccrs.PlateCarree(),extend='neither',transform_first=True)
ax2.add_feature(cfeature.LAND)
ax2.gridlines()
plt.show()
tl;dr:您必须在使用前清理数据集。
我认为您正在使用来自美国国家环境信息中心的海冰浓度 CDR 数据集。
我从那里下载了
seaice_conc_daily_sh_1980_v04r00.nc
并用你的代码得到了这个结果。你能看到两张地图上都画着红色海岸线吗?
不幸的是,它们不是来自地图图像或单独的海岸线数据。它们作为预定义的标志值包含在您的数据集中,有意将其放置在有效数据范围之外。
来自 用户指南:NOAA/NSIDC 被动微波海冰浓度气候数据记录,版本 4,
有效范围:0 到 1。 注意:字节值实际上存储在文件中从 0 到 100,但由于缩放因子属性 (scale_factor),大多数(但不是全部)netCDF 阅读器将其呈现为 0 到 1 范围内的值大多数 netCDF 读者都应用这个变量 0.01。标志值范围从 251 到 255。
使用
SIC[SIC > 1.0] = np.nan
从数据集中删除“非数据”后,新地图将如下所示。