最近帮物理海洋专业的同学画图,发给我的数据文件是nc文件,里面是动力高度网格数据,需要任选一点在地图上标注,且画出该点的时间序列。
nc文件处理NetCDF(network Common Data Form)网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。
NetCDF存储的数据是一个多自变量的函数,即f(x,y,z…)=value, 函数的自变量x、y、z等在NetCDF中叫做维(dimension),函数值value在NetCDF中叫做变量(variables),而自变量和函数值在物理学上的一些性质,在NetCDF中就叫属性(attributes)。
读取nc文件数据可以利用netCDF4库
import netCDF4 as nc nf = nc.Dataset(r'E://data//diann.nc','r')
一个NetCDF文件包含以下对象:
- 变量(variables)
nf.variables
#可得到adt变量的数据值,数据格式为numpy的数组 nf.variables['adt'][:]
- 维(dimension)
- 属性(attribute)
basemap是matplotlib下的一个工具包,可用来绘制二维地图,实现数据可视化。
basemap的安装如果直接在maplotlib的基础上,会很容易出错,建议去官网下载whl文件,再进行安装。安装相关问题可参考本篇博客
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False #这两行需要手动设置
from mpl_toolkits.basemap import basemap
plt.figure(figsize=(16,8))
#使用basemap()创建一个地图
m = basemap()
#把海岸线画上
m.drawcoastlines()
#开始画上国家
m.drawcountries(linewidth=1.5)
#添加经纬线
m.drawmeridians(
np.arange(0, 360, 30),#设置纬线的真实范围,以及维度的间隔
color='pink',
linewidth=1,
labels=[1, True, 0, True],
fontsize=10,
)
m.drawparallels(
np.arange(-90, 90, 30),
color='green',
linewidth=1,
labels=[1, True, 0, 1],
fontsize=10,
)
m.plot(160, 30, marker='o', color="r")
plt.show()
basemap库的功能特别强大,是用来可视化地理数据的很不错的一个工具,感兴趣的同学可以继续学习。这个网站对于basemap的介绍比较齐全,可点击这里继续学习



