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

Cartopy:圆锥范围投影地图的网格线标签设置及范围优化

北大西洋圆锥状地图的两个问题:范围优化与纬度标签位置调整

我用以下代码生成了北大西洋海域的地图,但纬度标签位置有误(需要显示在地图外侧而非内侧),且两侧都没显示出来。推测问题和范围设置方式有关,但还没找到其他实现这种圆锥形状的方法。现在想请教两个问题:

  1. 有没有更优的范围设置方法来实现这种圆锥形状?
  2. 怎么把y轴(纬度)标签设置在图表左侧且位于外侧?
# 导入模块
import cartopy
import cartopy.crs as ccrs
import matplotlib.path as mpath
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker

# 定义投影
dataproj = ccrs.PlateCarree()
mapproj  = ccrs.Stereographic(central_longitude=-30)

# 创建画布与坐标轴
fig = plt.figure()
ax = plt.axes(projection=mapproj)

# 添加地图要素
ax.add_feature(cartopy.feature.LAND, edgecolor='black')
ax.add_feature(cartopy.feature.OCEAN)

###
# 我想要实现圆锥形状的地图,以下是参考代码修改后的实现
#
# 经纬度边界
xlim = [-60, 0]
ylim = [50, 65]
lower_space = 3 
rect = mpath.Path([[xlim[0], ylim[0]],
                   [xlim[1], ylim[0]],
                   [xlim[1], ylim[1]],
                   [xlim[0], ylim[1]],
                   [xlim[0], ylim[0]],
                   ]).interpolated(20)
proj_to_data   = ccrs.PlateCarree()._as_mpl_transform(ax) - ax.transData
rect_in_target = proj_to_data.transform_path(rect)
ax.set_boundary(rect_in_target)
ax.set_extent([xlim[0], xlim[1], ylim[0] - lower_space, ylim[1]])
#
###
# 设置经纬度刻度与标签
gl = ax.gridlines(crs=ccrs.PlateCarree())
gl.xlocator = mticker.FixedLocator([-60, -45, -30,-15, 0])
gl.ylocator = mticker.FixedLocator([50, 55, 60, 65])
gl.bottom_labels = True
gl.left_labels   = True
gl.top_labels    = True
gl.right_labels  = True

当前地图效果

内容的提问来源于stack exchange,提问作者Anne Sophie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:27:45