2021-10-21

Heat flux的Matlab绘图(熟悉m_map

相关知识介绍

我由于海洋科学的课程原因需要进行物理海洋的学习,此博客对于课程中的常见问题进行记录和总结,同时熟练自己的编程能力,其中本次内容主要包括以下方面:

  1. 数据库:
    本次的热通量数据来源于ECMWF,网站链接
    通过该数据集中forecast的datasets选择相关的public datasets。本次采用的是其中的ERA-Interim的再分析数据,以某一年度为例,提取相关的数据信息,需要注意要提前注册相关的账号。
  2. m_map的使用:
    (1)m_map的安装:安装链接
    在下载相关的zip文件解压之后,将其中的m_map文件夹移动到matlab的工具箱(toolbox)的文件夹中。
    D:\matlab\toolbox
    2021-10-21
    随后点击设置路径并添加文件夹,保存后完成安装2021-10-212021-10-21
    (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');

即可完成对相关信息的提取
2021-10-21

绘制全球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);

结果如下:2021-10-21

上一篇:JavaSE学习记录01


下一篇:JavaSE 第一天作业