Python(netCDF4库)读取.nc文件(NetCDF气象数据文件)
import netCDF4 as nc
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
def plot_currents(file_path, variable_name, time, lon_name, lat_name):
"""
绘制洋流并保存为JPEG图片。
参数:
file_path (str): NetCDF文件路径。
variable_name (str): 数据变量名。
time(str): 时间变量名。
lon_name (str): 经度变量名。
lat_name (str): 纬度变量名。
"""
# 打开NetCDF文件
dataset = nc.Dataset(file_path, 'r')
# 获取经度、纬度、数据、时间
lons = dataset.variables[lon_name][:]
lats = dataset.variables[lat_name][:]
currents = dataset.variables[variable_name][:]
time_var = dataset.variables[time]
# 将时间变量转换为日期对象
times = nc.num2date(time_var[:], units=time_var.units).data
# 将日期对象转换为字符串格式 "年-月-日 时:分"
formatted_times = [t.strftime('%Y年%m月%d日') for t in times]
# 关闭NetCDF文件
# dataset.close()
# 创建经纬度网格
lon, lat = np.meshgrid(lons, lats)
# 设置地图投影为PlateCarree投影
fig, ax = plt.subplots(subplot_kw={'projection': ccrs.PlateCarree()})
# 获取数据 todo: 这里需要根据数据做调整
currents_data = currents[0, 0, :]
# 绘制降水量数据
cs = ax.contourf(lon, lat, currents_data, transform=ccrs.PlateCarree())
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 添加海岸线、州界和国界
ax.coastlines()
ax.gridlines(draw_labels=True)
ax.set_title(f'全球洋流 {formatted_times[0]}')
# 添加颜色条
fig.colorbar(cs, ax=ax, orientation='vertical', pad=0.05, aspect=50)
# 保存图像为JPEG文件
plt.savefig('currents_cartopy.jpg', dpi=400)
# 显示图形
plt.show()
参考链接
matplotlib文档
cartopy文档
利用Python(netCDF4库)读取.nc文件(NetCDF气象数据文件)的基本操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-07-03 Vue打包后出现.map文件