使用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
相关产品推荐
相关产品推荐

