最近需要对很多NC 文件进行绘图,通常情况下,我一直用GMT,不过不知道为什么,笔记本上的GMT 用不了了,可能是版本的问题,但是我下了很多版本都无法使用,画出来的图都有问题。由于笔记本安装硬盘也就256G 分给了几十G 做了Linux系统,剩下的拷了很多国内的数据基本就满了。所以arcgis没有按,实际上,按了我也不会用。。。

昨天偶然看到了用人用MATLAB 读取NC文件绘图,觉得还不错。所以把代码下载下来研究了一天。从结果来看,比GMT 效果差点,不够灵活,画个箭头都要迂回一下。昨天搞到凌晨三点,快睡觉的时候,突然听到楼下老大爷猛烈的咳嗽,慌的不行,这老子没事天天出去,又经常在楼下烧烤,推着他老伴,拎着一个大音响,人老激情犹在。说是这么说,OHIO 都应这样了,慌还是很慌,于是早上就把空调的出风口给关了,彻底隔绝了和一楼的联系。总之,我对老美这种明知道外面病毒漫天还非拉着老伴浪漫烧烤不考虑自己七老八十所剩无几的免疫力多余力气也就够支撑那个沉甸甸的肚子生死无惧誓要人权轴到根子里二杆子打不出一个回笼屁的精神,佩服的是五体投地,无话可说,无可奈何,无能无力。。。

算了,他有上帝,我没有,我比不过。不扯了,说回正事,今天又折腾了一下午,终于得到了自己想要的图,于是简单归纳下。

这是 比较专业的说明网站:https://www.eoas.ubc.ca/~rich/map.html

其他的个人博客,CSDN,以及网上的东西,都写的乱七八糟的,看的人都晕。所以推荐大家用这个。这是他的一些样本图,可以看出基本满足我们的需求:

首先要用的脚本是m_map,在网上都很容易找到。下载以后放到MATLAB目录去。使用help m_map查看所有的功能。

  1. 导入NC文件,这个应该比较简单,包括单个文件的读取以批处理可以使用以下代码:

lon = ncread('路径','LON');

lat = ncread('路径','LAT');

批处理:

datadir='路径'; %指定批量数据所在的文件夹

filelist=dir([datadir,'*.nc']); %指定批量数据的类型

k=length(filelist);

for s=1:100%假设100文件

filename=[datadir,filelist(s).name];

ncid=netcdf.open(filename,'NC_NOWRITE');

SMB{s}= ncread(filename,'SMB'); %读入变量

netcdf.close(ncid); % 关闭文件

end;

2. 进行绘图

事实上,很多NC 文件是气象或者地学专用,因此他的经纬度很多情况下是极坐标或者XY 坐标,并不是简单的经纬度,比如这样的:

按着等距离做的格网文件。这种情况下,经纬度和数值格网基本都是2D。也就是一个经度,一个纬度,一个值。而不是单纯的180到-180 ,90到-90。事实上我使用原始经纬度作图,但是一直报错,我参考了别人的代码,我发现他要求的经纬度格式应该是这样的:

也就是需要按行或者按列递增或者递减。因此地理长度坐标这里就不能用。所以我对数据进行了重采样,代码可以参考这个:

3. 准备好数据文件,接着就是作图,我的代码如下:

这里的各函数的作用可以直接在说明文档里查看。需要注意的是投影的选择。'rec', 'on' 这个开与关是一个正交的作用,大致对比如下,如果是off:

但是这种图是不太好看的,尤其是很多图需要排版时,所以参数可以选择“on”,效果如下:

4.另一个很麻烦的是,MATLAB没有自带的函数可以直接在点上画出箭头。有一个函数annotation ,用到是可以用,但是他的位置参数不是咱们的自己的经纬度坐标,而是xy 的值,如果很多点需要箭头就需要一个个调整,很麻烦。而m_map,我找了半天也没有看到,最多就是可以画圆圈。因此我只能选了他里面的一个速度场函数m_vec,

h1=m_vec(1 ,-37,64,0,5/20,'k','shaftwidth',1,'headlength',5,'key',{'5 mm','transient'});

代码很简单,但是当时一直困扰我的是,如果加入了参数‘key’,箭头方向就不能调整,一直是横的。。。。无奈。

所以绘制需要移除这个参数:

h2= m_vec(1,transient(i,1),transient(i,2),-0,transient(i,3)/20,'r', 'centered','yes','shaftwidth',0.05,'headlength',4);

里面的的参数数值很简单,第一个是比例因子,后面就是经纬度和数值,‘r’是红色。在后面就是对箭头样式的设置。值得注意的是,速度场的数值好像必须是俩分量,单独一个就报错,所以我不明白他这个函数怎么绘制U方向的速度场。因此我只能把其中一个参数设置为0,这样才能让最后的箭头指向U。网上也有个代码arrow的 ,但是我调试了一下,没有成功。

但事实上它 还是不如专业的绘图软件做的好,比如我师弟用arcgis帮我画的:

唯一的好处是,对批量的NC 文件可以一边处理,一边绘图。当然如果你只是想看NC 文件内容,你可以下载一个panoply:

当然其实m_map 也很强大,它里面自带了海岸线数据,地形数据貌似也有,不过我没用,他的功能也很多,画出来的图也很棒,不过需要自己慢慢摸索:

这算一个辅助工具。在不重要的结果图中,可以使用他,如果是比较重要的结果,我建议还是用相应的专业的软件绘制。

就这样~

ncl批量处理多个nc文件_利用MATLAB读取NC文件并绘图相关推荐

  1. 利用MATLAB读取.nc文件单像元数值并转为Excel格式(以中国日降雨量月均数据为例)

    以中国日降雨量月均数据(nc文件包含12月)为例,提取某经纬度下的多月份像元值. ([数据分享]1960-2020年中国1公里分辨率月降水数据集) 一.确定经纬度所在行列号 以92.18E,30.47 ...

  2. python 16bit转8bit的工具_利用python读取YUV文件 转RGB 8bit/10bit通用

    注:本文所指的YUV均为YUV420中的I420格式(最常见的一种),其他格式不能用以下的代码. 位深为8bit时,每个像素占用1字节,对应文件指针的fp.read(1): 位深为10bit时,每个像 ...

  3. matlab引用csv文件,如何用MATLAB读取csv文件

    如何使用Matlab读取csv文件 在Matlab中,有专门读取csv文件的函数:csvread().在Matlab的帮助文档中,有对这个函数的详细解释. csvread()函数有三种使用方法: 1. ...

  4. python处理nc数据_利用python如何处理nc数据详解

    利用python如何处理nc数据详解 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  利用python如何处理nc数据详解.txt ] (友情提示:右键点上行txt ...

  5. python关闭excel文件_利用Python读取和修改Excel文件(包括xls文件和xlsx文件)

    本文介绍一下使用Python对Excel文件的基本操作,包括使用xlrd模块读取excel文件,使用xlwt模块将数据写入excel文件,使用openpyxl模块读取写入和修改excel文件. 目录 ...

  6. java poi 读取xlsx文件_使用POI读取xlsx文件(SXSSFWorkbook)

    我正在尝试使用POI来读取大型xlsx文件的第一次测试,但要使用小文件进行简单测试,我无法显示单元格的值.使用POI读取xlsx文件(SXSSFWorkbook) 有人可以告诉我什么是我的错误.所有的 ...

  7. 怎么用python读取大文件_使用Python读取大文件的方法

    背景准备试一试:f =开放(\u201C\/道路\/ \/文件\u201D,\u201Cr\u201D)打印()最后:如果f:()调用读()将读取所有文件的内容,如果文件有10 g,记忆会破灭,所以, ...

  8. python处理pcap文件_[转载]Python读取pcap文件

    想试一试读取pcap文件的内容,并且分析出pcap文件头,每一包数据的pcap头,每一包的数据内容(暂时不包括数据包的协议解析),关于pcap文件的格式,可以参看:http://blog.sina.c ...

  9. php写excel文件_利用PHPExcel实现Excel文件的写入和读取

    作为一个原本的Java党,用过PHP才知道,原来对于Excel文件的写入和读取原来可以这么简单! 利用PHP实现对于Excel的读取,主要借助于PHPExcel插件来完成. PHPExcel下载地址: ...

最新文章

  1. [YTU]_2907(类重载实现矩阵加法)
  2. th:text=“${user?.name}“ ${?.}
  3. 后台代码和前台显示一样a href=' + URL + ' 使用转义字符
  4. 一文搞懂前端对象的深拷贝与浅拷贝
  5. 编程之美 裴波那楔数列
  6. bitcoin: 何为燃烧地址
  7. c 语言程序设计基础题答案,C语言程序设计基础教程_习题答案
  8. 计算机四级网络工程师(计算机网络多选)- 知识点
  9. 按键精灵手机助手之入门篇
  10. Java二叉树数据结构原理
  11. 阿里云短信接口实现模板
  12. VB.net小技巧——VB.net中的结构体和共用体
  13. 支付宝授权登陆php,支付宝app登录授权的infoStr授权登录流程
  14. 报错解决:symbol lookup error-----undefined symbol: JLI_StringDup
  15. 姓名加星号显示,只显示第一位和最后一位
  16. 基于3D Sensor的触控与悬控高性能方案
  17. Python中的groupby用法
  18. 超全的 爬虫+反爬虫+加密数据破解+JS逆向 干货教程,建议收藏!
  19. ( 杰理 AC695x ) 板级文件的配置
  20. 计算机学院混合式局域网 组网方案设计

热门文章

  1. 1 分钟抗住 10 亿请求!某些 App 怎么做到的?
  2. Pytorch基本操作流程: 七步成诗
  3. Licode—基于webrtc的SFU/MCU实现
  4. 爬取京东评论并生成词云
  5. Spring源码整体分析
  6. 鲸选厨房APPUI设计图
  7. linux aux是什么命令,Linux查看所有进程ps -aux命令介绍
  8. 途牛旅游项目练习-登录篇
  9. 【原创】MacOS 安装 homebrew-cask
  10. NSS: client certificate not found (nickname not specified)