墨卡托投影绘制普里兹湾海冰密集度分布异常问题求助
修正墨卡托投影绘制普里兹湾海冰密集度图的方法
你的代码中墨卡托投影绘制异常,核心原因是未指定目标区域范围、未适配高纬度投影参数,以及数据转换逻辑不当。以下是修正方案:
关键修改点
- 给墨卡托投影设置标准纬线,减少南极区域的投影变形
- 限定子图的显示范围,聚焦普里兹湾区域
- 移除可能导致高纬度数据扭曲的
transform_first=True参数
修正后的完整代码
import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature import numpy as np import cmaps 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) 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') ax1.gridlines() # 修正后的墨卡托投影子图 ax2 = fig.add_subplot(1, 2, 2, projection=ccrs.Mercator(latitude_true_scale=-60)) # 设置普里兹湾的经纬度范围(可根据你的数据调整) ax2.set_extent([60, 90, -75, -60], ccrs.PlateCarree()) ax2.add_feature(cfeature.LAND) cf = ax2.contourf(lon, lat, SIC[0], levels=np.linspace(0,1,51), cmap=cmaps.WhiteBlueGreenYellowRed, transform=ccrs.PlateCarree(), extend='neither') ax2.gridlines(draw_labels=True) # 可选:添加坐标标签,便于验证范围 plt.show()
修改说明
- 标准纬线设置:
ccrs.Mercator(latitude_true_scale=-60)指定南纬60°为无变形的标准纬线,匹配你关注的南极高纬度区域,缓解墨卡托投影在极区的拉伸变形。 - 范围限定:
set_extent([60, 90, -75, -60], ccrs.PlateCarree())聚焦普里兹湾(大致东经60°-90°、南纬60°-75°),避免默认显示全球导致南极区域被压缩到图底,无法清晰展示。 - 移除
transform_first=True:该参数会先将数据转换到墨卡托投影坐标系再绘制,极区数据容易出现坐标扭曲;默认逻辑(先基于经纬度绘制再转换投影)更适配地理数据可视化。
内容的提问来源于stack exchange,提问作者Aurora Wang
相关产品推荐
相关产品推荐

