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

Basemap底图叠加等值线图未全覆盖,求代码错误排查

问题排查与修复方案

核心问题1:Basemap坐标转换顺序错误

Basemap的投影转换函数m()要求参数顺序为**(经度, 纬度)**,但你代码里写成了m(Lat, Lon),把纬度和经度传反了,这会直接导致投影后的坐标混乱,等值线无法正确匹配底图范围。

核心问题2:MeshGrid网格维度与数据不匹配

你用[Lat, Lon] = np.meshgrid(lats, lons)生成的网格,维度是(len(lons), len(lats)),而多数气象数据(比如OLR)的维度是(纬度数, 经度数),两者维度不匹配会引发等值线绘制错位或不完整。需要调整meshgrid的输入顺序,先传入经度数组,再传入纬度数组。

修改后的完整代码

# 导入必要依赖(需确保已安装numpy、matplotlib和Basemap)
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# 初始化Miller投影底图
m = Basemap(projection='mill', resolution='i', lon_0=0., lat_0=0.)

# 绘制海岸线、边界与网格
m.drawcoastlines(linewidth=0.5)
m.drawmapboundary(fill_color='white')
m.drawparallels(np.arange(-90.,90.,30.), labels=[1,0,0,0])
m.drawmeridians(np.arange(-180.,180.,60.), labels=[0,0,0,1])

# 生成匹配数据维度的经纬度网格
Lon, Lat = np.meshgrid(lons, lats)
# 修正投影转换的参数顺序
pLon, pLat = m(Lon, Lat)
# 绘制等值线填充图
cfig = m.contourf(pLon, pLat, OLR_2011, levels=clevel, extend='both', cmap="jet")
cbar = m.colorbar(cfig, location='right', pad="10%")  
plt.show()

额外注意事项

  • 确认lats、lons数组的长度与OLR_2011的维度完全对应:lats长度需等于OLR_2011的第一维度,lons长度需等于第二维度。
  • 若OLR_2011数据是按(经度, 纬度)存储的,需先对数据转置(OLR_2011.T)再传入contourf。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:21:30