爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 290084|回复: 299

[源程序] [原创]MATLAB风场添加箭头标签的方法

  [复制链接]

新浪微博达人勋

发表于 2014-3-31 21:47:27 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 沙颖凯 于 2014-11-26 21:06 编辑

今天看到有人问而且长期没人来解决,就提供一下自己一直用的方法。这里面向Mapping Toolbox下的quiverm,但对任何调用了quiver.m的函数,比如M_Map下的,以及quiver.m都是适用的,对于画风向标的函数windbarb.m目前还没研究过,但想过去方法是类似的。

quiverm最常规的用法:quiverm(latitude, longitude, v, u, Size); 其中正数Size定义箭头大小,默认为1,这里提供的箭头标记的思路,是利用当前Size值与图像中箭头长度的对应关系,重画一个特定长度的箭头作为标记。

在quiver中,Size与风速u.^2+v.^2共同决定所画出箭头的尺度(长度),因此不同的[u, v]数据中Size的尺度是不一样的,当不同[u, v]的Szie经过尺度上的匹配后,他们就具有了可比性,也就有了绘制箭头标签的基础。关于quiver中的Size究竟如何工作,有兴趣的可以>> edit quiver;
这里上传一份我自己用于计算不同[u, v]下Size尺度的函数
Get_Autoscale.m (293 Bytes, 下载次数: 1073)

评分

参与人数 9金钱 +96 贡献 +14 收起 理由
水上哈里斯 + 1 很给力!
飞雨依晨 + 2 很给力!
bwbj + 1 很给力!
chenweibecome + 10
sfhstcn2 + 10 非常给力,可惜已到给分极限了
氤氲墓魂 + 20 + 2 真的很有用!
斥鷃 + 20 + 2 我能给分的极限了,给力!
wlzhongouc + 20 + 2 赞一个!
kongfeng0824 + 14 + 6

查看全部评分

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

新浪微博达人勋

发表于 2017-1-20 14:22:25 | 显示全部楼层
楼主你好,首先非常感谢你的这篇帮了我大忙也提供了很好的思路,但是我也是最近才发现legend的坐标是不能随便设的,跟实际风场一样都不行,必须跟实际风场一模一样,实际风场的横纵坐标是什么矩阵,legend的横纵坐标就必须是什么样的矩阵,画出来的比例尺才能和原来画的真是风场完全一致。请你有空再修正一下一楼的帖子吧,谢谢
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2014-7-29 17:15:45 | 显示全部楼层
wangmol 发表于 2014-7-29 15:14
貌似不考虑scale_factor即可,是吧?楼主加个好友吧,多多想你学习啊

不考虑scale_factor得到的箭头“不具有正确的长度”,无法作为标签(不过如果你仅是用来装饰就无所谓了,选一个小一点风速作为基准就看不出差别了)。

MATLAB画图时箭头长度是根据图中平均风速的大小确定的,如果几张图平均风速相差比较大,那是没法直接统一比例的,具体的做法是首先以一张图作为基准,然后在画其后的图时先计算后来的图与第一张图之间的scale_factor.

scale_standard=Get_Autoscale(longitude, latitude, v_standard, u_standard);
scale_current=Get_Autoscale(longitude, latitude,  u_current, v_current);
scale_factor=scale_standard/scale_current;
Handle=quiverm(latitude, longitude, v, u, 2.0*scale_factor);
% PAT: size "2.0" should in accord with what you used for u_standard, v_standard

然后这样画出来的图可以和u_standard, v_standard共用u_standard, v_standard的标尺,它自己就不需要标尺了(画出来也和u_standard, v_standard的一样)。
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2015-11-16 17:48:54 | 显示全部楼层

axes(Handle_Axes); % Select newly defined axes
set(Handle_Axes,'xcolor','w','ycolor','w','box', 'off');
set(Handle_Axes,'xtick',[],'ytick',[],'xticklabel',[]);
axis off;
加这几行
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2016-5-6 10:13:07 | 显示全部楼层
landiao707 发表于 2016-5-5 15:38
遇到同样问题,请问如何解决?

并没有找到非常好的方式,我觉得还是用grads或ncl比较好
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-7-29 15:02:31 | 显示全部楼层
非常感谢楼主分享。弱弱的问一句,如果画多个时次的图,如何用统一的比例(我的意思是现在画出来不同时次图25m/s红色标注的长度是不一样的,也就是说您定义的autoscale不同时次不一样,如何做到不同时次一样呢?)
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-4-1 13:38:20 | 显示全部楼层
感谢分享  
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-3 10:21:34 | 显示全部楼层
感谢分享,楼主好人
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-7 17:02:25 | 显示全部楼层
谢谢楼主分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-10 10:00:14 | 显示全部楼层
楼主的一系列帖子都很好,非常感谢,可以加精@Aires
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-10 10:01:36 | 显示全部楼层
感谢分享,已受用
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-10 14:00:47 | 显示全部楼层
不好意思,这些天没有看到。楼主的帖子非常好!这个有很多人会需要的!谢谢楼主分享~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-10 15:44:23 | 显示全部楼层
感谢分享 ,这些天没有看到。楼主的帖子非常好
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-5 19:52:50 | 显示全部楼层
我按照你这个方法,到了最后能加上比例尺的红色→,但是出不来箭头下面的字  25m/s
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-5 21:04:57 | 显示全部楼层
逆手一文字 发表于 2014-5-5 19:52
我按照你这个方法,到了最后能加上比例尺的红色→,但是出不来箭头下面的字  25m/s

箭头下面的字原理是textm(lat, lon, 'text'),你自己找个地方加上就行
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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