尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Python处理气象NetCDF数据:读取、裁剪、统计与可视化
一、前言做气象、海洋、能源研究的同学几乎每天都要和NetCDF.nc格式打交道。这种格式虽然跨平台、自带元数据但对新手来说用Python读取、裁剪、计算区域平均、画图每一步都可能踩坑。本文基于公开的ERA5示例数据可从Copernicus Climate Data Store免费获取完整演示用xarray打开并查看数据结构按经纬度范围裁剪计算区域如某省的逐月平均绘制等值线填色图并叠加地图底图使用cartopy全程不使用任何商业平台所有代码开源可复现。二、环境准备推荐使用conda创建专用环境bashconda create -n meteo python3.10 conda activate meteo conda install xarray netcdf4 matplotlib cartopy -c conda-forge pip install rioxarray # 可选用于地理裁剪三、数据准备本文使用ERA5 2022年全球月平均地表气温2m temperature数据文件名为t2m_2022.nc大小约180MB。您可以从 CDS官网 下载或使用我提供的示例片段见文末链接。如果手头没有真实数据可用下面的代码生成模拟NetCDF用于测试但建议使用真实数据练习pythonimport xarray as xr import numpy as np # 生成伪数据仅用于测试实际请替换为真实文件 lon np.linspace(70, 140, 141) lat np.linspace(15, 55, 81) time pd.date_range(2022-01-01, 2022-12-01, freqMS) data np.random.rand(len(time), len(lat), len(lon)) * 20 280 ds xr.Dataset({t2m: ([time,lat,lon], data)}, coords{time:time,lat:lat,lon:lon}) ds.to_netcdf(test.nc)四、核心代码与讲解4.1 读取文件并查看结构pythonimport xarray as xr ds xr.open_dataset(t2m_2022.nc) print(ds)输出类似textxarray.Dataset Dimensions: (time: 12, latitude: 721, longitude: 1440) Coordinates: * time (time) datetime64[ns] 2022-01-01 ... 2022-12-01 * latitude (latitude) float32 90.0 ... -90.0 * longitude (longitude) float32 0.0 ... 359.75 Data variables: t2m (time, latitude, longitude) float32 ... Attributes: ...注意ERA5的经纬度坐标名为latitude/longitude有时为lat/lon。先确认坐标名称。4.2 选择中国区域经度70~140°E纬度15~55°Npython# 方法一使用sel结合slice推荐 ds_china ds.sel(latitudeslice(55, 15), longitudeslice(70, 140)) # 注意latitude要降序从北到南因为ERA5的纬度从90到-90 # 如果您的数据纬度是升序则使用 slice(15,55)若经纬度名为lat/lon则对应修改。4.3 计算区域平均空间平均python# 对空间维度求平均得到每个月的区域平均温度 t2m_region_mean ds_china[t2m].mean(dim[latitude, longitude]) print(t2m_region_mean.values) # 一维数组长度12扩展如果想用面积加权平均因为网格面积随纬度变化可参考pythonweights np.cos(np.deg2rad(ds_china.latitude)) t2m_weighted ds_china[t2m].weighted(weights).mean(dim[latitude,longitude])4.4 将开尔文转为摄氏度pythont2m_c ds_china[t2m] - 273.154.5 绘制某个月份的空间分布图以2022年7月为例pythonimport matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature fig plt.figure(figsize(10, 8)) ax plt.axes(projectionccrs.PlateCarree()) # 提取7月数据索引为6 data_jul t2m_c.isel(time6) # 绘制等值线填色图 im ax.contourf(ds_china.longitude, ds_china.latitude, data_jul, levels20, cmapRdBu_r, transformccrs.PlateCarree()) # 添加地理要素 ax.add_feature(cfeature.COASTLINE, linewidth0.8) ax.add_feature(cfeature.BORDERS, linestyle:, linewidth0.5) ax.add_feature(cfeature.OCEAN, colorlightblue, alpha0.3) # 添加色标 plt.colorbar(im, axax, orientationhorizontal, pad0.05, label°C) # 设置标题和范围 ax.set_extent([70, 140, 15, 55], crsccrs.PlateCarree()) ax.set_title(2022年7月中国区域2m气温分布, fontsize14) plt.show()4.6 输出时间序列折线图pythonplt.figure(figsize(9,5)) plt.plot(t2m_region_mean.time, t2m_region_mean - 273.15, markero) plt.xlabel(时间) plt.ylabel(区域平均气温 (°C)) plt.title(2022年中国区域月平均气温变化) plt.grid(alpha0.3) plt.xticks(rotation45) plt.tight_layout() plt.show()五、常见问题与避坑问题解决方法打开文件报OSError: NetCDF: Unknown file format检查文件是否完整或使用enginenetcdf4参数坐标名称不是latitude/longitude先用ds.coords查看然后用rename({lat:latitude})修改裁剪后维度顺序混乱使用transpose(time,latitude,longitude)重排地图边界缺失安装naturalearth_lowres数据conda install -c conda-forge naturalearth内存不足使用xr.open_dataset(..., chunks{})结合 Dask 分块处理六、完整脚本汇总我已将上述代码整理成一个.py文件可一次运行生成两幅图。您可以在我的Gist中获取[链接占位]七、延伸思考批量处理多年数据可使用xr.open_mfdataset(t2m_*.nc)并行读取。提取单站点时间序列使用ds.sel(latitude30, longitude120, methodnearest)。保存处理后的结果ds_china.to_netcdf(t2m_china_2022.nc)。八、结语以上是气象数据处理中最基础也最频繁的操作。对于不熟悉编程或希望直接获取处理结果的研究者也可考虑使用羲和能源气象大数据平台。
RELATED

相关推荐

《我的倒霉蛋宝贝》 泰剧|在线观看|奇幻|浪漫|Unlucky Bae

《我的倒霉蛋宝贝》 泰剧|在线观看|奇幻|浪漫|Unlucky Bae

《我的倒霉蛋宝贝》 泰剧|在线观看|奇幻|浪漫|Unlucky Bae资料可在线播放《我的倒霉蛋宝贝》https://tool.nineya.com/s/1jskahdln English Practice Fantasy Romance Edition 以《我的倒霉蛋宝贝》为主题的英语练习,边追剧边学英语。Part 1 Vocabulary Choose th…

📅 2026/11/2 5:00:33
商品条码查询PROAPI实战:从在线调试到代码集成全解析

商品条码查询PROAPI实战:从在线调试到代码集成全解析

引言 商品条码(如EAN-13、UPC)是商品在全球流通中的唯一身份标识。无论是电商库存管理、扫码购物、还是追溯溯源,高效、准确地查询条码对应的商品信息都是刚需。国内外的商品条码查询API服务众多,但接口标准不一、文档质量参差不…

📅 2026/10/5 19:42:36
如何免费高效下载全网音乐:开源工具MusicDownload完整指南

如何免费高效下载全网音乐:开源工具MusicDownload完整指南

如何免费高效下载全网音乐:开源工具MusicDownload完整指南 【免费下载链接】MusicDownload 歌曲下载 项目地址: https://gitcode.com/gh_mirrors/mu/MusicDownload 你是否曾想过拥有一个完全免费、开源且功能强大的音乐下载工具?MusicDownload正是…

📅 2026/10/7 0:28:50
MORE NEWS

更多资讯

📰

AT89C52+DS18B20数字温度计:单总线时序与74LS164显示实战

简介:这份毕业设计文档面向电子信息、自动化及单片机课程设计方向的学生,围绕基于AT89C52单片机与DS18B20智能温度传感器的数字温度计展开,可用于课程设计、毕业设计选题参考及测温报警类小系统搭建。压缩包内仅含1个doc文档,约30…

📰

ROS 2履带小车URDF建模实战:从零构建可看、可仿、可调的机器人数字模型

1. 项目概述:为什么履带小车在ROS 2里必须从URDF开始建模?你手上有一台刚焊完底盘、装好电机和履带轮的物理小车,电机驱动正常,编码器能读数,但一打开RVIZ2——画面里只有空荡荡的灰色网格,连个影子都看不到…

📰

制造业数字化转型中的群晖企业级存储解决方案

1. 制造业数据存储的痛点与群晖解决方案在制造业数字化转型浪潮中,数据存储与备份正面临三大核心挑战:首先是生产数据呈指数级增长,从设计图纸到设备传感器数据,单个工厂日均产生TB级数据已成常态;其次是数据安全要求严…

📰

非线性二次分解提升光伏功率预测精度

1. 项目概述:非线性二次分解在光伏功率预测中的应用光伏功率预测是新能源并网调度中的关键技术难题。传统单一预测模型往往难以同时捕捉光伏功率的线性趋势和非线性波动特征。我们提出的Ridge-RF-LSBoost组合模型通过创新的非线性二次分解策略,将预测任务…

📰

Kotlin变量与Compose状态管理实战指南

1. Kotlin变量基础与Compose环境搭建在Android开发领域,Kotlin已经成为官方推荐的首选语言。当我们使用Jetpack Compose构建现代Android UI时,对Kotlin变量的理解尤为重要。不同于传统XML布局方式,Compose采用声明式编程范式,这使…

📰

Redis持久化机制:RDB与AOF详解及生产实践

1. Redis持久化机制概述Redis作为内存数据库,其数据默认存储在内存中。但内存的易失性意味着一旦服务器重启或发生故障,所有数据都将丢失。为了解决这个问题,Redis提供了两种主要的持久化机制:RDB(Redis Database&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬