You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

墨卡托投影绘制普里兹湾海冰密集度分布异常问题求助

修正墨卡托投影绘制普里兹湾海冰密集度图的方法

你的代码中墨卡托投影绘制异常,核心原因是未指定目标区域范围、未适配高纬度投影参数,以及数据转换逻辑不当。以下是修正方案:

关键修改点

  • 给墨卡托投影设置标准纬线,减少南极区域的投影变形
  • 限定子图的显示范围,聚焦普里兹湾区域
  • 移除可能导致高纬度数据扭曲的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()

修改说明

  1. 标准纬线设置:ccrs.Mercator(latitude_true_scale=-60) 指定南纬60°为无变形的标准纬线,匹配你关注的南极高纬度区域,缓解墨卡托投影在极区的拉伸变形。
  2. 范围限定:set_extent([60, 90, -75, -60], ccrs.PlateCarree()) 聚焦普里兹湾(大致东经60°-90°、南纬60°-75°),避免默认显示全球导致南极区域被压缩到图底,无法清晰展示。
  3. 移除transform_first=True:该参数会先将数据转换到墨卡托投影坐标系再绘制,极区数据容易出现坐标扭曲;默认逻辑(先基于经纬度绘制再转换投影)更适配地理数据可视化。

内容的提问来源于stack exchange,提问作者Aurora Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:18:16