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

使用xarray绘图添加海岸线时出现'AxesSubplot'属性错误求助

问题原因

你遇到的AttributeError是因为xarray绘制分面图时自动创建的是普通matplotlib AxesSubplot对象,而coastlines()是cartopy专属GeoAxes类的方法——普通坐标轴根本没有这个属性。另外,你一开始手动创建的带cartopy投影的ax其实没被分面图用到,因为plot.contourf会为每个子图生成全新的坐标轴。

解决办法

要让分面图的每个子图都使用cartopy投影,只需在xarray的绘图函数里通过subplot_kws参数指定投影类型。这样生成的每个坐标轴都会是支持coastlines()的GeoAxes对象。

修正后的完整代码:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

# 计算月平均数据(已完成)
# ds_mm = gb.mean(dim='TIME')

pp = ds_mm.ILD_T05
p = pp.plot.contourf(   
    x='LON86_140',
    y='LAT71_110',
    col='month',
    levels=30,
    col_wrap=3,
    cmap=plt.cm.rainbow,
    # 关键:指定每个子图使用cartopy投影
    subplot_kws={'projection': ccrs.PlateCarree()}
)

# 现在可以正常添加海岸线了
for ax in p.axes.flat:
    ax.coastlines()
    # 可选:添加带标签的经纬网格
    ax.gridlines(draw_labels=True, linestyle='--')
补充说明
  • 删掉了原本没用的ax= plt.axes(projection=ccrs.PlateCarree())行,因为分面图不会复用这个单独创建的坐标轴。
  • 如果需要调整经纬标签的显示位置或样式,可以给gridlines()添加参数,比如xlocs=range(86,141,10)指定经度刻度间隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:06:24