爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9012|回复: 13

[经验总结] ncl 关于显著和不显著矢量风场叠加的几个经验 附脚本

[复制链接]

新浪微博达人勋

发表于 2022-10-14 15:22:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 guoguohh 于 2022-10-18 15:02 编辑

最近在画等值线图叠加风场的矢量图,不仅要把通过显著的地方画出来,还要用不同颜色画出未通过显著性的箭头,从而能够看出区域的环流情况。
论坛里有很多人会遇到显著和不显著风场叠加错位的情况,我一开始也有这种情况发生,在经过下面的调试后,最后得出了叠加不错位的解决方法,仅供参考,有大佬还知道别的什么方法也可以交流交流
这些经验来自不停的控制变量进行设置、绘制、对比得出。
[size=10.5000pt]1. 等值线图与矢量图叠加时
[size=10.5000pt]若显著性通过的区域面积很大,建议不要用打点的方式表示显著区域,画出的图会很乱,最好利用where函数设置未通过显著性的地方为fillvalue
[size=10.5000pt]zg_test = where(zgsnr.gt.1. , zg , zg@_FillValue)         
[size=10.5000pt];zgsnr是检验是否通过指标的变量,大于1时保留zg的变量,否则设置为fillvalue
[size=10.5000pt];画图以普通的等值线图设置进行绘制就可以
;注意,如果底图设为白色时缺测地方就是白色,选择colorbar时就不要选择包含白色的色板
[size=10.5000pt]2. 矢量图叠加时
[size=10.5000pt]在风场叠加时我主要遇到两个问题:第一我的风场在经度为0度的地方出现空白区域,风场不连续;第二我叠加的风场发生错位。
[size=10.5000pt]1)[size=10.5000pt]对于第一个问题主要是因为我的变量的经度范围是从0开始到357.5°(分辨率为2.5°*2.5°),只需要在引入变量时利用ua =lonFlip(fu->ua(0,{850},:,:))就可以解决,函数简介:lonFlipReorders a global rectilinear array about the central longitude coordinate variable.
[size=10.5000pt]2)[size=10.5000pt]第二个问题有两个思路,如果选择用原始风场(灰色)和通过显著性检验的风场(黑色)叠加,这种情况下,只有画小区域时风场不会错位,面积大概是欧亚大陆面积以内不会错位,但是画全球的话不管我怎么设置resource都没有办法解决错位问题(如果有人成功过希望能分享一下解决办法);
[size=10.5000pt]如果选择叠加通过显著性区域和未通过显著性区域的箭头,范围不管怎么取都不会错位,但前提是vcGlyphStyle不能选择"CurlyVector",否则不显著区域会缺失一部分或者叠加错位,具体原因我不太确定,可能绘制曲线箭头还会经过一些ncl内部的运算吧。

如果要叠加等值线图可以先画等值线图,之后把风场叠加到等值线图上就可以,也可以用gsn_csm_vector_scalar_map,注意叠加图不能用gsn_csm_vector_map,而应该是gsn_csm_vector。区域越小,矢量箭头分布的越合理。
  1. begin
  2. ;引入变量uv
  3. fu = addfile("ensmean_subua_sulasia-base.nc", "r")
  4. ua =lonFlip(fu->ua(0,{500},:,:))
  5. fv = addfile("ensmean_subva_sulasia-base.nc", "r")
  6. va =lonFlip(fv->va(0,{500},:,:))
  7. ;引入判定显著区域的变量
  8. stdua  = addfile("SNR_subua_sulasia-base.nc", "r")
  9. ua_snr = lonFlip(stdua->ua(0,{500},:,:))
  10. stdva  = addfile("SNR_subva_sulasia-base.nc", "r")
  11. va_snr = lonFlip(stdva->va(0,{500},:,:))
  12. ;提取显著和不显著区域的变量
  13. ;ua_snr大于1或va_snr大于1时保留ua和va的变量,否则设置为fillvalue
  14. ua_test = where(ua_snr.gt.1.or.va_snr.gt.1.,ua,ua@_FillValue)
  15. va_test = where(ua_snr.gt.1.or.va_snr.gt.1.,va,va@_FillValue)
  16. ;ua_snr小于等于1和va_snr小于等于1时保留ua和va的变量,否则设置为fillvalue
  17. ua_fail = where(ua_snr.le.1.and.va_snr.le.1, ua,ua@_FillValue)
  18. va_fail = where(ua_snr.le.1.and.va_snr.le.1, va,va@_FillValue)
  19. copy_VarCoords(ua,ua_test)
  20. copy_VarCoords(va,va_test)
  21. copy_VarCoords(ua,ua_fail)
  22. copy_VarCoords(va,va_fail)
  23. printMinMax(ua_test,True)
  24. printMinMax(va_test,True)
  25. /:用mask也可以,逻辑是一样的
  26. ua_test= mask(ua,((ua_snr.gt.1.).or.(va_snr.gt.1.)),True) ;
  27. va_test= mask(va,((ua_snr.gt.1.).or.(va_snr.gt.1.)),True)
  28. ua_fail = mask(ua,((ua_snr.lt.1.).and.(va_snr.lt.1.)),True) ;
  29. va_fail = mask(va,((ua_snr.lt.1.).and.(va_snr.lt.1.)),True)
  30. copy_VarCoords(ua,ua_test)
  31. copy_VarCoords(va,va_test)
  32. copy_VarCoords(ua,ua_fail)
  33. copy_VarCoords(va,va_fail)
  34. printMinMax(ua_test,0)
  35. printMinMax(ua_fail,0)
  36. ;/
  37. wks = gsn_open_wks("eps","subuv_500_sulasia-base")  
  38. res                          = True            
  39.   res@gsnDraw               = False      
  40.   res@gsnFrame              = False   
  41.   res@gsnAddCyclic           = True   
  42.   res@gsnLeftString           =" "
  43.   res@gsnRightString          =" "
  44. res@mpFillOn                  = True     
  45.   res@mpDataSetName           = "Earth..4"   
  46.   res@mpOutlineOn             = True      
  47.   res@mpLandFillColor         = "white"
  48. res@tmXTOn                    =False
  49.   res@tmYROn                  =False
  50.   res@tmYLLabelFontHeightF    =0.02
  51.   res@tmXBLabelFontHeightF    =0.02

  52. res@vcGlyphStyle                 = "LineArrow"     ; turn on curley vectors
  53.   res@vcMonoLineArrowColor      = True
  54.   res@vcMinDistanceF            = 0.01
  55.   res@vcLineArrowThicknessF      = 1.5
  56.   res@vcLineArrowHeadMaxSizeF   =0.002
  57.   res@vcLineArrowHeadMinSizeF   =0.002
  58. res@vcRefAnnoOn=True
  59. res@vcRefAnnoPerimOn          = True  
  60. res@vcRefAnnoString1On        = True
  61. res@vcRefMagnitudeF           = 2           
  62. res@vcRefAnnoString1          = "2 m/s"
  63. res@vcRefLengthF              = 0.02        
  64. res@vcRefAnnoSide             = "top"

  65. res@vcLineArrowColor      = "black"
  66. base =gsn_csm_vector_map(wks,ua_test,va_test,res)  

  67. res@vcRefAnnoOn=False
  68. res@vcLineArrowColor      = "gray"
  69. plot =gsn_csm_vector(wks,ua_fail,va_fail,res)  
  70. overlay(base,plot)
  71. draw(base)
  72. frame(wks)
  73. end
复制代码





全球

全球

中国区域,小区域风场分布更好看

中国区域,小区域风场分布更好看

评分

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

查看全部评分

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

新浪微博达人勋

 楼主| 发表于 2022-10-14 15:27:01 | 显示全部楼层
从word里编辑好复制来,直接把换行和tab符号表示出来了,[size=10.5000pt]没有任何意义啊大家
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-10-14 15:39:51 | 显示全部楼层
顶一下
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 成长值: 0
发表于 2022-10-14 15:40:05 | 显示全部楼层
好东西,顶一个
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-10-14 18:15:41 | 显示全部楼层
AuuuTi 发表于 2022-10-14 15:40
好东西,顶一个

靴靴~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-10-18 10:11:18 | 显示全部楼层
学习到了(没看到2楼时还在研究[size=10.5000pt]什么意思)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-12-2 16:03:09 | 显示全部楼层
好帖帮顶。
求问楼主如果用了vcMinDistanceF这个属性,叠加显著和不显著的风场是否会错位?
我用了这个属性,不管怎么设置都会错位
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-12-6 10:30:08 | 显示全部楼层
Lu_uup 发表于 2022-12-2 16:03
好帖帮顶。
求问楼主如果用了vcMinDistanceF这个属性,叠加显著和不显著的风场是否会错位?
我用了这个属 ...

没有错位诶,你检查一下两个风场的这个属性值是不是一样
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-12-20 22:08:33 | 显示全部楼层
用gsn_csm_vector_scalar_map_ce(wks,u,v,data,res)函数画,函数会根据标量data空间分布对u、v矢量上色,data取显著性相关的参数

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-12-21 20:10:23 | 显示全部楼层
小小小白 发表于 2022-12-20 22:08
用gsn_csm_vector_scalar_map_ce(wks,u,v,data,res)函数画,函数会根据标量data空间分布对u、v矢量上色,d ...

谢谢你~学到啦
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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