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

xarray的FacetGrid指定cartopy投影后丢失经纬度轴标签的原因与解决

问题:xarray分面绘图添加cartopy投影后丢失经纬度坐标轴数值

原因分析

当通过subplot_kws={"projection": ccrs.PlateCarree()}指定cartopy投影时,matplotlib的普通坐标轴会被替换为cartopy的GeoAxes对象。这种地理坐标轴默认不会显示常规的经纬度刻度和标签——因为cartopy更侧重地图投影的可视化逻辑,需要手动配置才会显示经纬度数值。而不指定投影时,用的是普通matplotlib轴,会自动读取数据的经纬度维度值并直接显示在坐标轴上。

解决方法

需要遍历分面图的每个子图,为每个GeoAxes添加带标签的网格线,以此显示经纬度数值。修改后的代码如下:

import xarray as xr
import cartopy.crs as ccrs

airtemps = xr.tutorial.open_dataset("air_temperature")
air = airtemps.air - 273.15
t = air.isel(time=slice(0, 365 * 4, 250))

# 绘制分面图
g_simple = t.plot.contourf(
    x="lon", 
    y="lat", 
    col="time", 
    col_wrap=3,
    transform=ccrs.PlateCarree(),
    subplot_kws={"projection": ccrs.PlateCarree()},
    levels=51,
)

# 遍历每个子图,添加经纬度标签
for ax in g_simple.axes.flat:
    # 添加带标签的网格线,指定数据投影为PlateCarree
    gl = ax.gridlines(draw_labels=True, crs=ccrs.PlateCarree())
    # 关闭顶部和右侧的标签,避免与其他子图重叠
    gl.xlabels_top = False
    gl.ylabels_right = False
    # 可按需调整标签字号
    gl.xlabel_style = {'size': 8}
    gl.ylabel_style = {'size': 8}

这样处理后,每个子图的坐标轴就会显示正确的经纬度数值,同时保留cartopy投影的设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:07:22