爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 12659|回复: 14

[程序设计] Matlab画位相等值线图程序——避免出现位相梯度太大的地方

[复制链接]

新浪微博达人勋

发表于 2015-6-12 18:26:31 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 Aires 于 2015-6-12 18:28 编辑

      在用Matlab画位相等值线图时,经常会出现等值线极为密集的地方。如果你的位相范围是0~360的话,则会在0等值线附近出现非常多的等值线;如果范围是-180~180,则会在180度等值线附近出现这个现象。这个现象并不是真实的等值线情况,是因为位相会构成一个循环。因为0度其实就是360度,绕了一圈回来。

先上张错误的图看看:
tide_grads.png
这是一张同潮图。你可以看到在330线附近那些等值线密集造成的一堆黑的。

为什么会出现这种情况呢?
Matlab在执行contour/contourf时在做插值,插值成你想画的等值线,所以会在0和300多度的地方大量插值,造成位相梯度很大的假象。

那么如何画才能避免这种情况呢?
可以采取以下思路:
分段去画!
思路:以0~360为例。
1. 先将0设为NaN
2. 把矩阵复制三份
3. 画小于180的等值线:将大于180的设为NaN,这样就避免了不正确的插值!
4. 画大于180的等值线:将第二个复制矩阵小于180的设为NaN。由于0也设为了NaN,所以不会在0和360度附近大量插值。
5. 画0线:怎样才能画0线呢?想法就是让0在负数和正数之间,这样插值得到的0线才是正确的。
比如,可以把90~270之间设为NaN,再把大于270小于360的数减去360,就变为了负数,这样再用contour/contourf画0线才可以。

好了,把上面的思路转化为程序如下:
sp(sp==0)=NaN;
sp1=sp;
sp2=sp;
sp3=sp;
sp1(sp1<180 & sp1>0)=NaN;
m_contour(lon,lat,sp1,210:30:330);
sp2(sp2<360 & sp2>190)=NaN;
m_contour(lon,lat,sp2,30:30:180);
sp3(sp3<270 & sp3>90)=NaN;
a=find(sp3>180);
b=sp3(a)-360;
sp3(a)=b;
m_contour(lon,lat,sp3,[0 0]);


出来的图修复后就可以是这样的了:
tide.png

评分

参与人数 1金钱 +20 贡献 +1 收起 理由
baishizhou + 20 + 1 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-6-12 20:41:11 | 显示全部楼层
太厉害了,学习一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-6-13 23:22:10 | 显示全部楼层
塞雷,谢谢楼主   
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-19 11:47:31 | 显示全部楼层
非常有用的东西。我也一直会出现这个问题。mark一下来学习学习。多谢楼主。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-20 20:33:49 | 显示全部楼层
太好了,学习下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-20 21:55:20 | 显示全部楼层
楼主用的是什么数据画的等值线?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-1-13 09:12:24 | 显示全部楼层
这是一个可行的做法,但不是很方便
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-10-25 14:58:53 | 显示全部楼层
学习了 神贴
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-11-13 14:11:24 | 显示全部楼层
请问陆地部分的数据是怎么处理的?如果陆地地方是nan呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-3-30 12:51:10 | 显示全部楼层
楼主厉害哦。正需要,十分感谢
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表