Heat flux的Matlab绘图(熟悉m_map
相关知识介绍
我由于海洋科学的课程原因需要进行物理海洋的学习,此博客对于课程中的常见问题进行记录和总结,同时熟练自己的编程能力,其中本次内容主要包括以下方面:
-
数据库:
本次的热通量数据来源于ECMWF,网站链接
通过该数据集中forecast的datasets选择相关的public datasets。本次采用的是其中的ERA-Interim的再分析数据,以某一年度为例,提取相关的数据信息,需要注意要提前注册相关的账号。 -
m_map的使用:
(1)m_map的安装:安装链接
在下载相关的zip文件解压之后,将其中的m_map文件夹移动到matlab的工具箱(toolbox)的文件夹中。
D:\matlab\toolbox
随后点击设置路径并添加文件夹,保存后完成安装
(2)m_map函数初步介绍:
本次使用的主要由:
m_proj;
m_coast;
m_grid;
m_contourf;
其中:
>> m_proj('set')%获取投影类型
Available projections are:
Stereographic
Orthographic
Azimuthal Equal-area
Azimuthal Equidistant
Gnomonic
Satellite
进一步获取指定类型的信息
>> m_proj('set','Robinson')
返回的代码为
'Robinson'
<,'lon<gitude>',[min max]>
<,'lat<itude>',[min max]>
<,'clo<ngitude>',value>
<,'rec<tbox>', ( 'on' | 'off' )>
通过
>> m_grid get
获取相关的信息,如下:
'axes',( gca | axis handle)
'box',( 'on' | 'fancy' | 'off' )
'xtick',( num | [value1 value2 ...])
'ytick',( num | [value1 value2 ...])
'xticklabels',[label1;label2 ...]
'yticklabels',[label1;label2 ...]
'xlabeldir', ( 'middle' | 'end' )
'ylabeldir', ( 'end' | 'middle' )
'ticklength',value
'tickdir',( 'in' | 'out' )
'tickstyle',('dm' | 'da' | 'dd' )
'color',colorspec
'gridcolor',colorspec
'backgroundcolor',colorspec
'linewidth', value
'linestyle', ( linespec | 'none' )
'fontsize',value
'fontname',name
'XaxisLocation',( 'bottom' | 'middle' | 'top' )
'YaxisLocation',( 'left' | 'middle' | 'right' )
其余函数可以通过相关的网站进行查找网站链接
3. nc文件的读取:
通过ncdisp进行文件的提取,
ncdisp('F:\sea\nc—heat flux\2019.nc');
提取的文件信息如下
Format:
netcdf4_classic
Global Attributes:
_NCProperties = 'version=1|netcdflibversion=4.6.1|hdf5libversion=1.10.4'
Conventions = 'COARDS'
title = '4x daily NMC reanalysis (2014)'
history = 'created 2017/12 by Hoop (netCDF2.3)'
description = 'Data is from NMC initialized reanalysis
(4x/day). It consists of T62 variables interpolated to
pressure surfaces from model (sigma) surfaces.'
platform = 'Model'
dataset_title = 'NCEP-NCAR Reanalysis 1'
References = 'http://www.psl.noaa.gov/data/gridded/data.ncep.reanalysis.html'
Dimensions:
lat = 94
lon = 192
time = 1460 (UNLIMITED)
Variables:
lat
Size: 94x1
Dimensions: lat
Datatype: single
Attributes:
units = 'degrees_north'
actual_range = [88.542 -88.542]
long_name = 'Latitude'
standard_name = 'latitude'
axis = 'Y'
lon
Size: 192x1
Dimensions: lon
Datatype: single
Attributes:
units = 'degrees_east'
long_name = 'Longitude'
actual_range = [0 358.125]
standard_name = 'longitude'
axis = 'X'
time
Size: 1460x1
Dimensions: time
Datatype: double
Attributes:
long_name = 'Time'
delta_t = '0000-00-00 06:00:00'
avg_period = '0000-00-00 06:00:00'
standard_name = 'time'
axis = 'T'
units = 'hours since 1800-01-01 00:00:0.0'
actual_range = [1919712 1928466]
shtfl
Size: 192x94x1460
Dimensions: lon,lat,time
Datatype: single
Attributes:
long_name = '4xDaily Sensible Heat Net Flux at surface'
units = 'W/m^2'
precision = 0
least_significant_digit = 0
GRIB_id = 122
GRIB_name = 'SHTFL'
var_desc = 'Sensible Heat Net Flux'
level_desc = 'Surface'
statistic = 'Mean'
parent_stat = 'Individual Obs'
missing_value = -9.969209968386869e+36
valid_range = [-2000 7000]
dataset = 'NCEP Reanalysis'
actual_range = [-761 1812]
在Variables的变量中找出所需要的信息,通过ncread进行赋值
longitude=ncread('F:\物理海洋课程课件与作业\相关资料\nc—heat flux\2019.nc','longitude');
即可完成对相关信息的提取
绘制全球latent heat flux的代码演示
clc;
clear;
ncdisp('F:\物理海洋课程课件与作业\相关资料\nc—heat flux\qianre.2019.nc');
longitude=ncread('F:\物理海洋课程课件与作业\相关资料\nc—heat flux\qianre.2019.nc','lon');
latitude = ncread('F:\物理海洋课程课件与作业\相关资料\nc—heat flux\qianre.2019.nc','lat');
time=ncread('F:\物理海洋课程课件与作业\相关资料\nc—heat flux\qianre.2019.nc','time');
lhtfl=ncread('F:\物理海洋课程课件与作业\相关资料\nc—heat flux\qianre.2019.nc','lhtfl');
a=zeros(length(longitude),length(latitude));
for i=1:(length(time))
a=a+lhtfl (:,:,i);
end
a=a/(length(time));
[x,y]=meshgrid(latitude,longitude);
N=8*(max(longitude)-min(longitude));
M=8*(max(latitude)-min(latitude));
lon=linspace(min(longitude),max(longitude),N);
lat=linspace(min(latitude),max(latitude),M);
[X,Y]=meshgrid(lat,lon);
A=interp2(x,y,a,X,Y);%二次插值
hold on
m_contourf(Y,X,A);%画出等高线图
m_proj('robinson','long',[0 360],'lat',[-90 90]);%叠加世界地图
m_coast('patch',[0.3 0.3 0.3],'edgecolor','k');%填充陆地
m_grid('box','fancy','linestyle','-','gridcolor','w','backcolor',[1 1 1]);%网格绘制
colormap(cool);%更改颜色区间
h = colorbar;
h.Label.String = 'W/m^2';%获得colorbar的handel并添加单位
xlabel('Longitude');
ylabel('Latitude') ;
set(gca,'fontsize',12);
title('2019年度全球平均潜热辐射通量','FontName','宋体','fontsize',12);
结果如下: