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

使用Matplotlib绘制纬度-时间温度变化图时遇警告问题求助

解决Matplotlib绘制时间-纬度温度剖面的警告问题

问题根源

警告提示的「x坐标非单调递增」,是因为你的lat数组大概率是从高纬度到低纬度(比如0°→-80°)递减排列,通过meshgrid生成的lat_grid继承了这个递减顺序,作为contourf的x轴输入时不符合要求,触发警告。另外你的代码还有几处语法/逻辑冗余问题,比如重复创建画布、错误的子图声明。

修复步骤

1. 修正基础代码错误

先把代码里的语法错误和冗余部分改掉:

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

# 读取数据
d = Dataset('sst.mon.ltm.1991-2020.nc')
sst = d.variables['sst'][:]  # 加上[:]读取实际数据
time = d.variables['time'][:]
lon = d.variables['lon'][:]
lat = d.variables['lat'][:]

# 计算经度平均的海温
mean_sst = np.mean(sst, axis=2, keepdims=False)

2. 解决x坐标单调问题

方案A:直接调整纬度数组为单调递增(推荐)

你的需求是绘制时间-纬度的温度剖面,完全不需要用Basemap,用普通Matplotlib绘图即可,同时把lat数组反转成递增顺序:

fig, ax = plt.subplots(figsize=(8,5))
# 反转lat数组,从-80°到0°递增
lat_sorted = lat[::-1]
# 对应反转mean_sst的纬度维度,保证数据和坐标匹配
mean_sst_sorted = mean_sst[:, ::-1]
# 生成网格
lat_grid, time_grid = np.meshgrid(lat_sorted, time)
# 绘图
cx = ax.contourf(lat_grid, time_grid, mean_sst_sorted, cmap='seismic')
plt.colorbar(cx, label='SST (°C)')
ax.set_xlabel('Latitude')
ax.set_ylabel('Time')
plt.show()

方案B:如果一定要用Basemap(不推荐,此图无需地理投影)

确保输入的x坐标(纬度)是单调递增的,同时修正Basemap的使用逻辑:

fig = plt.figure(figsize=(5,5))
ax = fig.add_subplot(211)
# 自动判断并调整lat为递增顺序
lat_sorted = lat[::-1] if lat[0] > lat[-1] else lat
mean_sst_sorted = mean_sst[:, ::-1] if lat[0] > lat[-1] else mean_sst

m = Basemap(projection='merc', llcrnrlon=0, urcrnrlon=180, llcrnrlat=-80, urcrnrlat=0)
# 将纬度转换为投影后的x坐标
x, _ = m(lat_sorted, np.zeros_like(lat_sorted))  # 取任意经度的投影x值
lat_grid_proj, time_grid = np.meshgrid(x, time)
cx = m.contourf(lat_grid_proj, time_grid, mean_sst_sorted, cmap='seismic')
plt.show()

关键说明

  • 「随时间变化的纬度方向温度变化」本质是二维剖面(时间×纬度),用普通Matplotlib的contourf完全足够,Basemap是用于绘制带地理投影的地图,这里使用反而增加复杂度。
  • 可以用print(lat)检查纬度数组顺序,如果输出是[0, -10, -20, ..., -80],就是递减的,反转后即可解决单调问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:30:07