爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5190|回复: 7

[秀图] 画流线的另一思路

[复制链接]

新浪微博达人勋

发表于 2021-12-20 09:27:11 | 显示全部楼层 |阅读模式

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

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

x
闲话少叙,之前我在绘制流矢量图时,最常用的函数就是 quiver(),在使用的过程中,碰到了一些问题,最大一个就是矢量密度的问题,比如我的点比较密集的时候,出来的图是这样的

密密麻麻的,实在有点难看出东西来,但从上图也隐约看出来对马暖流、黄海暖流和西朝鲜沿岸流的大体流动结构,再多的就没有了

quiver() 函数没有自带的 density 属性,所以想要调节矢量显示的密度,一般都会采用 meshgrid() 和 griddata() 重新定义绘图网格,以及插值到网格上,这个实现也比较简单,就是要一遍遍的去尝试,怎么说,总能试出满意的效果

早年我在写本科毕业的时候(早年这个词用的妙呀),还用过 quiversc() 这个函数,它里面定义了一个 density 属性,可以用来调整流矢量的密度,这函数是在 Climate Data Toolbox 工具箱里的(chadagreene/CDT: The Climate Data Toolbox for MATLAB (github.com)),by the way,这个工具箱里面还有许多实用的函数

使用 quiversc() 的话,只需要改动一下 density 属性就能实现密度调整效果,就不用再次重新定义网格了,虽然 quiversc() 里面也是这样子做的


我给画了三种密度大小,尴尬,好像效果也并不是很好,但没关系,总归有些进步

像在 density=100 的时候,可以很清楚的看到黄海暖流的分支,和分支的路径,哦对,这份流速数据的 FVCOM 模型跑出来的,本身就带有一些数值误差,但觉得还好,不要在意小细节

其实上面的内容是在阐述我接下来这样做的原因,就感觉直接用直来直去的箭头不太能够表达出流场的复杂结构,个人看法而已,也怪我对这种图形不够熟练,所以想,那就换一种方式呈现呗,于是乎,发现别人画的流线图蛮有意思的,于是我也画了画,主要是用了 m_map 工具箱里的 m_streamline() 函数


可以看到,效果蛮不错的,by the way,m_streamline() 里也用 density 属性在控制流线密度,怎么说呢,好用的函数千篇一律

上面的图给我一种感觉就是线太长,让我有点难理,能不能把线改短一些呢?感觉应该能做,但我因为不太熟悉这个函数,也不知道要咋样去做,转头一想,要不索性自己来写一个,因为感觉在技术层面上看,并没有太大的难度,所以说做就做

经过一通操作,捣鼓出来 plot_stream() 函数,by the way,我觉得这个函数名不错,先上结果(实在是上传图片大小有限制,我把分辨率调低了,还裁了一下,附件里有完整的图片)

plot_stream_250.png


可以看到,我给每条短流线按流速的大小用了不同的颜色,主要是用 m_colmap() 函数定义出 colors,流线计算是用了 stream2() 函数,原谅我并不懂其他的函数,所以我用的是循环的方式,一条一条的挨个画,还有就是箭头部分,主要的根据每条短流线 End - 1 和 End 两个点来画的,函数中的theta 和 ratio 也是相对于这两个点的连线来定义的,具体如下图所示,手画而已,勿cue
思路.jpg
其实,只根据后面两个点来画箭头部分,会出现一些小问题,就是流线太弯,箭头太直了,但我不想再搞了,等以后吧,主要是我觉得这个问题能够接受,不太像问题




还有一个是,如果遇到下面这种报错,不妨将坐标和流速都转置一下,然后再用这个函数,具体原因是 stream2() 出的,不太能怪我
报错.jpg


回到 plot_stream() 画出的结果,很明显呀,黄海暖流、沿岸流什么的,渤海里面也是,都可以比较清晰的看出来,而且用短流线图,在分析路径时更方便,这也是写这个函数的原因,当然当然,都是个人见解,无所谓啦,看什么图不重要,重要的是能看出来

今天的12月19,期末时节,主要是前天刚考完高描,得缓一缓,但感觉老躺宿舍里也不像回事儿,所以来到办公室摸鱼写了写,下个月还有几门考试,开学时,导师让看的论文还剩几篇,倒是准备去学车,能让人提起点兴致

最后祝我,也祝你变得更强!干就完了,欧里给!



m_streamline.png
quiversc_100.png
quiversc_200.png
quiversc_50.png
quiver.png

plot_stream.m

3.19 KB, 下载次数: 17, 下载积分: 金钱 -5

售价: 1 贡献  [记录]

plot_stream.zip

9.56 MB, 下载次数: 32, 下载积分: 金钱 -5

评分

参与人数 2金钱 +11 贡献 +2 收起 理由
XCIII + 1
mofangbao + 10 + 2

查看全部评分

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

新浪微博达人勋

 楼主| 发表于 2021-12-20 09:33:27 | 显示全部楼层
现在用的 colormap 是 jet,也可以进入代码里面直接改就行了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-12-20 16:15:55 | 显示全部楼层
不错不错,值得学习!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-12-25 01:54:44 来自手机 | 显示全部楼层

                               
登录/注册后可看大图
看来师兄也在青岛
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-10-14 16:30:22 | 显示全部楼层
值得学习!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-10-14 17:31:50 | 显示全部楼层
     运行后发现不能绘图,检查为stream_line = stream2(x,y,u,v,startx,starty,[0.1, 20]);      stream_line为空的cell数组。请教一下贴主,是何原因?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-3-16 11:08:28 | 显示全部楼层
没有贡献,请问楼主可以发邮箱么2511311261@qq.com
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-12-14 18:17:25 | 显示全部楼层
小英子 发表于 2022-10-14 17:31
运行后发现不能绘图,检查为stream_line = stream2(x,y,u,v,startx,starty,[0.1, 20]);      stream_l ...

建议试一下去确定数据都是double或者single的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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