Python中如何将三维温度数组平均为二维数组(NetCDF数据处理)
实现NetCDF日平均温度计算与等值线绘制
1. 读取NetCDF数据
先导入所需库,通过netCDF4.Dataset读取文件及目标变量:
import netCDF4 as nc import numpy as np import matplotlib.pyplot as plt import cartopy.crs as ccrs # 打开NetCDF文件,替换为你的文件路径 file = nc.Dataset('your_file.nc', 'r') # 读取温度、经度、纬度变量 tdisk = file.variables['tdisk'][:,:,:] # 形状(68,52,46) lons = file.variables['lons'][:,:] # 形状(52,46) lats = file.variables['lats'][:,:] # 形状(52,46) # 关闭文件 file.close()
2. 计算日平均温度
对扫描维度(第0轴,对应nscans)求均值,得到(52,46)的日平均温度数组:
# 沿扫描维度计算均值 daily_avg_tdisk = np.mean(tdisk, axis=0)
3. 绘制等值线图
根据需求选择带地理投影的专业绘图,或基础二维等值线图:
带地理投影的等值线图(推荐)
结合cartopy绘制符合地理坐标的等值线图:
# 创建带投影的绘图对象 fig, ax = plt.subplots(figsize=(10,6), subplot_kw={'projection': ccrs.PlateCarree()}) # 添加地图基础元素 ax.coastlines() ax.add_feature(ccrs.feature.LAND, edgecolor='black') # 绘制等值线填充 contour = ax.contourf(lons, lats, daily_avg_tdisk, levels=20, cmap='coolwarm', transform=ccrs.PlateCarree()) # 添加色标与标签 plt.colorbar(contour, ax=ax, label='Temperature (K)') ax.set_title('Daily Average Tdisk') ax.set_xlabel('Longitude') ax.set_ylabel('Latitude') plt.show()
基础二维等值线图
若无需地理投影,可直接绘制数值等值线:
fig, ax = plt.subplots(figsize=(10,6)) contour = ax.contourf(lons, lats, daily_avg_tdisk, levels=20, cmap='coolwarm') plt.colorbar(contour, label='Temperature (K)') ax.set_title('Daily Average Tdisk') ax.set_xlabel('Longitude') ax.set_ylabel('Latitude') plt.show()
注意:
- 替换
your_file.nc为实际文件路径 - 根据温度数据实际单位调整色标标签(如°C)
- 未安装
cartopy可通过pip install cartopy安装,或直接使用基础绘图方式
内容的提问来源于stack exchange,提问作者Merlot Ponti
相关产品推荐
相关产品推荐

