添加新云天气象主编微信或QQ:130188121,及时获取或发布气象升学、就业、会议、征稿及学术动态信息!

近期招聘培训安排(点击图片了解详情):

在大气科学中,matlab可以用于小规模的科学计算,也可以绘制各类气象图,做各种统计运算,功能强大。由于近期在家休息关系,顺便写写使用m_map和matlab读取和绘制海温图的教程。笔者花费了一天的时间学习了m_map(入门,熟悉下语法),遇到一些难点,希望通过我对这个例子的分解,能化简入门难度,从而能帮助到有需要的人。

如果没有安装过m_map,则需要额外的安装,可以参考这个帖子:

https://blog.csdn.net/wokaowokaowokao12345/article/details/88354118

总体思路是:输入路径,文件名,读取范围,时间层,变量名等,调用m_map绘制

1)输入路径,文件名,读取范围

input('string','s')      输入函数,string的内容会打印在屏幕,有 's' 的情况下是输入字符串,没有的情况下输入数字

clc;clear;%输入文件InPath = input('请输入文件完整路径:','s');    file_name = input('输入文件名:','s');boundary = input('输入绘图范围,格式:[起始经度 终止经度 起始纬度 终止纬度]\n');

2)打开NC文件,显示NC文件信息

strcat(a, b, ......)          合并字符串a,b......,如果直接打上去的字符串记得用引号括起来;例如:strcat('app',  'ple')输出就是apple

ncdisp( 'source' )    显示NC文件信息,其中source是文件位置

%文件打开与数据载入source1 = strcat(InPath,file_name);  %文件源,strcat函数:合并字符串ncdisp(source1);                     %查阅和显示NC文件信息

3)读取NC文件的精度,时间层数等,方便后面的计算

同时需要注意的是,不同的NC文件对经纬度和时间层数的表述并不一致,一些NC文件会将longitude简写为lon;latitude简写为lat;时间层数为其他的表述,这个需要我们注意并适当修改;以下代码是ECMWF的描述:

length( 矩阵名 )   查询矩阵长度

lon = ncread(source1,'longitude');   %查阅经度信息loncount = length(lon);              %查阅经度的精度(有多少格点)lat = ncread(source1,'latitude');    %查阅纬度信息latcount = length(lat);              %查阅纬度精度(有多少格点)time = ncread(source1,'time');       %查阅时间层数信息ticount = length(time);              %查阅时间层数

4)显示时间层数,避免超出NC文件的范围,并且根据需要选择变量

disp(  )     把括号内的内容打印在屏幕上

disp('时间层数为:')disp(ticount);                       %显示时间层数t = input('输入绘制的时间层:');varname = input('输入变量:','s');    %根据ncdisp显示的变量输入绘图

5)我们在前面输入了我们要绘制的经纬度,这个语句是对我们规定经纬度进行查询,把绘图区域规定在一定的范围内,得出对应的矩阵区域(matlab中数据可以看成一个n维矩阵)

find( 条件 )  查询函数,查询对应的矩阵位置

%查找绘制范围对应的所在矩阵的位置,相当于截取一小段矩阵lon_scope = find(lon >= boundary(1) & lon<=boundary(2));lat_scope = find(lat >= boundary(3) & lat<=boundary(4));lon_number = length(lon_scope);     lat_number = length(lat_scope);

6)得出对应的矩阵,使用ncread语句读取NC文件,并储存在变量中

ncread(source,varname ,start,count,stride)

其中:source:文件路径

varname:要绘制的变量名

start:初始读取位置

count:读取范围

stride:读取步长

imrotate( 矩阵或图像名, 旋转角度n )  将图像所对应的矩阵旋转n度,要注意的是正方向是逆时针方向;

start = [lon_scope(1),lat_scope(1),1];    %初始位置count = [lon_number,lat_number,ticount];  %读取范围 stride1 = [1,1,1];                        %读取步长sst1 = ncread(source1,varname ,start,count,stride1);sst_plot = imrotate(sst1(:,:,t), 90);    %旋转矩阵,因为matlab是列优先

7)设置投影方式,绘制范围

m_proj('投影方式',  'lat',  [纬度范围], 'lon', [经度范围])

其他的投影方式参见官方文档

m_proj('Mercator','lat',[boundary(3) boundary(4)],'lon',[boundary(1) boundary(2)]);

8)生成网格

linspace(x1, x2, N)   x1 开始数值;x2 结束数值;N生成个数,生成从x1开始到x2结束的N个均匀分布的行向量

meshgrid( x, y )    将向量x和向量y规定的区域(类似于经纬度)生成格点,比如x是经度向量,y是纬度向量的话,将会生成一个以x为经度,y为纬度的坐标网格。

lon_1=linspace(boundary(1),boundary(2),lon_number); [plon,plat]= meshgrid(lon_1,lat_1);hold on

9)绘制内容

m_pcolor(lon, lat, varname)   这个函数的功能是把要绘制的格点数据,绘制在地图上,样式是伪色彩图。其中:lon上个步骤中meshgrid函数生成的经度格点;lat上个步骤meshgrid函数生成的格点(应该说是句柄比较合适),也就是meshgrid等号前的2个句柄。

m_coast( )  这个函数是绘制海岸线,并规定海岸线颜色,陆地填充颜色等。(这个代码我忘了添加陆地颜色了)

m_grid( )     绘制边框,其具体设置见官方文档,代码中,('box','fancy')指的是绘制外边框,选择fancy样式,这时候默认是黑白交替的样式

m_pcolor(plon,plat,sst_lot)             %添加我们要画的内容m_coast('color',[0 0 0],'linewidth',2);  %绘制海岸线,填充陆地m_grid('box','fancy')                    %添加边框hold on

10)添加标题和色标

title('标题文字', 'fontsize', 15)   fontsize后面的数字是设置字体大小

colorbar('h')    添加色标

下面的set  设置色标属性

title('SST','fontsize',15) %标题%添加色标h = colorbar('h');set(get(h,'title'),'string','摄氏度℃');hold on

我们对其进行编译,运行:

输入路径时结尾记得加上“ \ ”符号,输入文件名记得加上后缀名,输入范围时经纬度用空格区分,输入时记得加上中括号[  ],我们绘制西太平洋的SST

输入的变量名可以在上面输出的NC文件信息中找到

输出结果

由于本文较为仓促,仅学了一天m_map,难免会有疏漏;笔者代码水平还属于入门中的入门水平,有很多代码写的时候并不规范,希望引以为戒!水平较低,希望前辈们指出不足的地方

附完整代码:

clc;clear;%输入文件InPath = input('请输入文件完整路径:','s');    file_name = input('输入文件名:','s');boundary = input('输入绘图范围,格式:[起始经度 终止经度 起始纬度 终止纬度]\n');%文件打开与数据载入source1 = strcat(InPath,file_name);  %文件源,strcat函数:合并字符串ncdisp(source1);                     %查阅NC文件信息lon = ncread(source1,'longitude');   %查阅经度信息loncount = length(lon);              %查阅经度的精度(有多少格点)lat = ncread(source1,'latitude');    %查阅纬度信息latcount = length(lat);              %查阅纬度精度(有多少格点)time = ncread(source1,'time');       %查阅时间层数信息ticount = length(time);              %查阅时间层数disp('时间层数为:')disp(ticount);                       %显示时间层数t = input('输入绘制的时间层:');varname = input('输入变量:','s');    %根据ncdisp显示的变量输入绘图%查找绘制范围对应的所在矩阵的位置,相当于截取一小段矩阵lon_scope = find(lon >= boundary(1) & lon<=boundary(2));lat_scope = find(lat >= boundary(3) & lat<=boundary(4));%绘制范围的数据量lon_number = length(lon_scope);     lat_number = length(lat_scope);start = [lon_scope(1),lat_scope(1),1];    %初始位置count = [lon_number,lat_number,ticount];  %读取范围 stride1 = [1,1,1];                        %读取步长sst1 = ncread(source1,varname ,start,count,stride1);sst_plot = imrotate(sst1(:,:,t), 90);    %旋转矩阵,因为matlab是列优先%墨卡托投影,规定绘制范围m_proj('Mercator','lat',[boundary(3) boundary(4)],'lon',[boundary(1) boundary(2)]);%生成网格lat_1=linspace(boundary(3),boundary(4),lat_number);lon_1=linspace(boundary(1),boundary(2),lon_number); [plon,plat]=meshgrid(lon_1,lat_1);hold on%绘制图形m_pcolor(plon,plat,sst_plot)             %添加我们要画的内容m_coast('color',[0 0 0],'linewidth',2);  %绘制海岸线,填充陆地m_grid('box','fancy')                    %添加边框hold on%添加标题title('SST','fontsize',15) %标题%添加色标h = colorbar('h');set(get(h,'title'),'string','摄氏度℃');hold on

-END-

版权所有,转载请联系作者或标明出处

往期回顾:

气象招聘 | 2020上海国际气象人才招聘会企业&人才火热报名中!

气象招聘 | 云南省气象部门事业单位2020年公开招聘高校毕业生公告

气象招聘 | 粤港澳大湾区气象监测预警预报中心(深圳气象创新研究院)招聘公告

新云天气象公众号联系人微信/QQ:1301881212020届气象本科考研与就业QQ群:9301072622020届气象研究生毕业就业QQ群:3465774272021届气象本科考研与就业QQ群:6395222392021届气象研究生毕业就业QQ群:696948743

MATLAB 长度和像素_气象编程 | Matlab教程:nc文件的打开和使用m_map绘制海温图相关推荐

  1. MATLAB中fix啥意思,matlab fix函数用法_常见问题解析,matlab

    matlab syms什么意思_常见问题解析 matlab中syms的意思是定义多个变量,可以用来创建符号变量x和y,语法是"syms x y":也可以创建一些符号变量.函数和数组 ...

  2. matlab去除图片水印_怎么用matlab从含有水印的图像中提取出水印

    展开全部 3 视频水印的嵌入和检测方案 3.1水印的预处理 采用二值图像作为待嵌入的水印数据,本文e69da5e887aa323131333532363134313032313635333133333 ...

  3. matlab与c 接口与混合编程,Matlab与C/C++混合编程接口及应用方法解析

    1 引言 Matlab 是当前应用最为广泛的数学软件,具有强大的数值计算.数据分析处理.系统 分析.图形显示甚至符号运算等功能[1].利用这一完整的数学平台,用户可以快速实现十分 复杂的功能,极大地提 ...

  4. matlab app设计步骤_如何从MATLAB/Simulink入手,系统地学习自动驾驶?

    自动驾驶相关的软件工具有不少,作为汽车工程师,我们最熟悉的可能是MATLAB/Simulink.如何从MATLAB/Simulink入手,系统地学习自动驾驶? 本文来源:自动驾驶仿真 自动驾驶相关的软 ...

  5. matlab最优控制实验报告_最优控制的MATLAB实现.doc

    最优控制的MATLAB实现 最优控制的MATLAB实现 摘要 线性二次型最优控制是一种普遍采用的最优控制系统设计方法.使用MATLAB软件设计的GUI控制界面实现最优控制,有较好的人机交互界面,便于使 ...

  6. matlab创建nc文件怎么打开,MATLAB打开nc文件并读取nc文件数据

    MATLAB打开nc文件 ncdisp('E:\**\**.nc') 输入该命令后命令行窗口会显示该nc文件的基本信息 MATLAB读取nc文件 根据上一步中nc文件的基本信息提取nc文件的相应数据. ...

  7. MATLAB 长度和像素_MATLAB——单车道NaSch模型

    先上一个输出的时空图 时空图 以下是代码 clear 刚学MATLAB,写了单车道的NaSch模型练练手,暂时还有几个问题: 首先就是关于车辆投放的问题,目前采用的是最开始一次性投放若干车辆,如要比较 ...

  8. MATLAB 长度和像素_Matlab中短时傅里叶变换 spectrogram和stft的用法

    在Matlab中,做短时傅里叶变换需要使用函数spectrogram,而在Matlab2019中,引入了一个新的函数stft,下面我们就来看下这两个函数都如何使用. 短时傅里叶变换的基本原理就是将数据 ...

  9. MATLAB 长度和像素_matlab之随心所欲创建QR二维码

    导 LEAD 语 感谢关注matlab爱好者公众号!如果公众号文章对您有帮助,别忘了点击分享和"在看"哦!若您对公众号有什么意见或建议,请在公众号中回复或在任意文章底部留言! 二维 ...

最新文章

  1. 微软python在线学习_微软再推免费在线 Python 教程,面向数据科学和机器学习初学者...
  2. LeetCode 17. Letter Combinations of a Phone Number--笔试题--C++,Python解法
  3. 第 3 章 MySQL 存储引擎简介
  4. 寻找GridView中模板列中的控件
  5. 程序员面试金典 - 面试题 16.19. 水域大小(BFS/DFS)
  6. [转] Java中的容器
  7. 水晶报表如何查看sql_amazon自动广告如何查看报表?怎么知道亚马逊的自然流量和广告流量分别是多少?...
  8. 分布式消息中间件之kafka设计思想及基本介绍(一)
  9. Codis安装部署全架构
  10. Git(1)-- Win10 安装 Git 详细教程(超详细纯小白教程)
  11. 深入理解C语言(转载)
  12. SQL Server 时间、日期函数
  13. mt6573的DSI 接口
  14. ちょっとした難しい言葉まとめ③
  15. Swift 周报 第十七期
  16. 编写js找到一个字符串中指定子字符串的所有位置
  17. 如何生成Android的keystore文件
  18. 冬季六种低热量时蔬助你排毒
  19. 个人日记-纪录片《蓝海防线》观后感-20200921
  20. Android错误代码返回,【已解决】JPUSH的回调返回错误代码6012

热门文章

  1. 进销存设计与分析_进仓单(2)
  2. 文件及文件夹设置密码
  3. 为什么写《大数据架构详解》这本书
  4. RTSP协议详解(转载)
  5. jquery案例-演示手机logo图片事件
  6. 手机射频测试总结(五)——蓝牙部分
  7. java计算机毕业设计小型超市管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  8. 第955期机器学习日报(2017-04-30)
  9. springboot+微信小程序老年人健康保障管理系统毕业设计源码302303
  10. 2021 七大高薪认证,你都get了吗?