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

Matplotlib绘制海表温度地图仅显示一半数据的问题求助

解决海表温度地图仅显示一半数据的问题

问题根源在于你的NetCDF数据经度范围是0-360°,但Basemap的cyl(圆柱)投影默认使用**-180-180°**的经度范围,导致180-360°的那部分数据被绘制到了地图可视范围之外,所以只显示了一半内容。

修复步骤

  1. 转换经度范围:把0-360°的经度转换为-180-180°格式
  2. 重新排序数据:转换后经度顺序会混乱,需要按经度从小到大排序,确保SST数据和经纬度对应

修改后的完整代码

from matplotlib import pyplot as plt
from netCDF4 import Dataset
import numpy as np
from mpl_toolkits.basemap import Basemap

# 读取数据
data = Dataset('sst.day.mean.1981.nc')
lats = data.variables['lat'][:]
lons = data.variables['lon'][:]
sst = data.variables['sst'][:]

# 1. 将经度从0-360转换为-180-180
lons = np.where(lons > 180, lons - 360, lons)

# 2. 对经度排序,并同步调整SST数据的顺序
sorted_lon_indices = np.argsort(lons)
lons_sorted = lons[sorted_lon_indices]
sst_sorted = sst[:, :, sorted_lon_indices]

# 创建地图
mp = Basemap(projection='cyl')
lon_grid, lat_grid = np.meshgrid(lons_sorted, lats)
x, y = mp(lon_grid, lat_grid)

# 绘制SST
c_scheme = mp.pcolor(x, y, np.squeeze(sst_sorted[0,:,:]), cmap='jet')
mp.drawcoastlines()
mp.drawstates()
mp.drawcountries()
plt.colorbar(c_scheme, label='Sea Surface Temperature (°C)')  # 可选:添加颜色条
plt.title('Sea surface temperature')
plt.show()

关键细节解释

  • 转换经度时,用np.where把大于180°的经度减去360,得到对应的负经度值
  • 必须排序经度:转换后的经度会变成[0,1,...,179,-180,-179,...,-1]的混乱顺序,直接画图会导致数据错位,所以用np.argsort获取排序索引,同步调整经度和SST数据的列顺序

内容的提问来源于stack exchange,提问作者Guilherme Diniz Queiroz De Car

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:22:33