Bootstrap

基于matlab的.nc文件可视化的实现

正文

1. nc后缀文件的介绍

什么是. nc文件?百度百科介绍如下,
NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。

接地气的解释,就是一种记录高维数据的数据格式,同时里面还有着这些高维数据的一些属性信息(如单位,描述记录的数据代表什么;维度,有什么物理含义;全局信息,数据来源。这些都相当于我们的实验记录,方便提醒我们怎么用这些高维数据)。

2. 利用matlab可读取nc文件的方法

matlab自带有ncdisp、ncread,大家自行doc/help.
详细例子可参照参考文献【2】。
流程为ncdisp查看nc文件的格式—meshgrid生成坐标系(有的nc文件可省略,依赖于nc的格式是否为一维的)–pcolor函数成图。
但是这些不方便我们添加一些辅助信息,如陆海界限,河流等。

3. 利用m_map箱实现.nc文件可视化

path1='###########.nc'; %自行填补
tmax=double(ncread(path1,'tasmax'));  %读取文件类型为tasmax类型的nc文件
nlat=double(ncread(path1,'lat')); %读取经度变量,为二维数据省略meshgrid
nlon=double(ncread(path1,'lon')); %读取纬度变量

%%m_map生成数据
day=40; %展示第40天的数据
m_proj('lambert','lon',[63.3574 175.6253],'lat',[-18.2930 58.5900]);
m_contourf(nlon,nlat,tmax(:,:,day)-273,'linestyle','none','levelstep',.1); %m_contour
hold on
m_coast('line','Color', [.5 .5 .5]);% 只保留轮廓线
 m_grid('linestyle','none','box','fancy','tickdir','out','LineWidth',0.5);
 hold off

我这里以MRI-CGCM的降水为例

读取数据
path1='F:\MRI-CGCM3\pr_day_MRI-CGCM3_historicalNat_r1i1p1_19800101-19891231.nc';
nlat=double(ncread(path1,'lat')); %读取经度变量,为二维数据省略meshgrid
nlon=double(ncread(path1,'lon')); %读取纬度变量
pr=double(ncread(path1,'pr'));
[mlat,mlon]=meshgrid(nlat,nlon);

% 展示
day=190; %展示第190天的数据
m_proj('miller','lon',[0 358.875],'lat',[-89.14152 89.14152]);
m_contourf(mlon,mlat,pr(:,:,day),'linestyle','none'); 
colormap(flipud(m_colmap('Blues')));%设置颜色legend
hold on
m_coast('line','Color', [.5 .5 .5]);% 只保留轮廓线
 m_grid('linestyle','none','box','fancy','tickdir','out','LineWidth',0.5);
 hold off

在这里插入图片描述
在文献【1】中还有许多官方给出例子,大家可以自行研究。

其它.NC处理软件

参考文献

【1】m_map箱下载
【2】https://www.csdn.net/gather_2c/MtzaUg3sOTg2LWJsb2cO0O0O.html
【3】http://blog.sciencenet.cn/home.php?mod=space&uid=3386114&do=blog&quickforward=1&id=1209501
【4】自定义shp文件绘图

;