- 积分
- 35968
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-7-26
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 Aires 于 2018-3-23 03:12 编辑
很长时间没干正事,没发过帖子了。最近是想把适于简单处理数据的Matlab软件和绘图精致的GrADS软件结合起来用。所以就涉及到如何把Matlab处理后的数据写为GrADS识别的二进制格式绘图问题。在这里,给大家介绍写二进制数据的Matlab函数——fwrite。
这样,以后大家如果觉得Matlab画图繁琐,想用GrADS画图,就可以这样用啦~
废话不多说,上正题~~~
第一步:处理数据,变成GrADS直接绘图的数据。
举例来说,如一个空间SST数据,矩阵大小为21*81,把它变为Matlab中contour或contourf直接绘图的矩阵形式。这时候要注意,GrADS二进制数据存放顺序为:经度、纬度、层、变量、时间。所以在用fwrite写为二进制数据时,一定要按GrADS默认格式存放顺序去写!
以SST数据来说,是经度和纬度,按直接contour画图的话,SST正好是数据矩阵,行是不同经度数据,列是不同纬度数据。这里,大家要先知道fwrite函数是如何把Matlab数据写入二进制文件的。下面简单介绍fwrite函数用法,具体help fwrite或者doc fwrite查看帮助。
我们这里以最简单经纬SST数据为例:
采用这种格式:count = fwrite(fid, A, precision)
fid是文件指针,用fwrite之前,需要用fopen打开一个新文件,如:fid=fopen('文件路径','w');
A是要写入的数据矩阵,注意:Matlab写入是按列写入的,也就是说如果A是一个二维矩阵,那么fwrite的写入方式是先是第一列,然后是第二列,依此类推。。。
就Matlab处理后的SST数据而言,如果按照contour画图的矩阵直接用fwrite是不对的,大家可以自己理解一下。按照经度、纬度的顺序(GrADS默认存放格式),首先需要将SST数据flipud,然后转置。即:sst=flipud(sst); sst=sst'; 这样处理后的矩阵直接用fwrite就是GrADS默认存放顺序了。
另外,precision是设置写入二进制数据的格式,具体大家查fread函数,里面有介绍。注意:默认的是uint8,我们将precision改成float32。
第二步:打开二进制文件,用fwrite写入数据
举例:
fid=fopen('filename','w');
count=fwrite(fid,sst,'float32') % 注意sst是用flipud和转置后的数据矩阵
fclose(fid)
这样就写好了二进制数据啦,接下来常规的写好ctl文件,就可以用GrADS画图了。
其他复杂的写入大家自己变通一下就好了~
@斥鷃发过gridform函数的帖子也可以自动实验上述的功能,链接如下:
http://bbs.06climate.com/forum.p ... 11&fromuid=9098
|
评分
-
查看全部评分
|