爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
12
返回列表 发新帖
楼主: sun_shine_Xia

ncl中如何实现参考风矢量的圆盘表现形式?

[复制链接]
回帖奖励 70 金钱 回复本帖可获得 5 金钱奖励! 每人限 2 次(中奖概率 70%)

新浪微博达人勋

 楼主| 发表于 2014-4-21 10:21:07 | 显示全部楼层
longlivehj 发表于 2014-4-20 21:53
简单写了个示例,供你参考!
程序中头几行,lat和lon用于设定圆盘中心经纬度,len用于设定圆盘半径(NDC坐 ...

恩,不错,按照这个就画出来!!!膜拜~~还有个问题,他这个箭头的类型能设置吗?我研究了下wmsetp,wmvectma这两个函数,不知道哪能修改箭头类型。。我看Wmap里面的VRN这个参数貌似只设置了箭头的长度
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-21 10:30:35 | 显示全部楼层
longlivehj 发表于 2014-4-20 21:53
简单写了个示例,供你参考!
程序中头几行,lat和lon用于设定圆盘中心经纬度,len用于设定圆盘半径(NDC坐 ...

就是想要把箭头画成附图中这样的,我看了下他的example wmex16,发现是一个程序啊~没搞懂 QQ截图20140421102450.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-21 10:54:39 | 显示全部楼层
sun_shine_Xia 发表于 2014-4-20 21:26
grads的话就只有一个圆,一个数字的添加了吧~四个不同指向的剪头咋画?

你去搜搜 grads自定义风场箭头 我记得有脚本的 照着仿就行了 貌似在动力论坛里面有
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-21 11:13:51 | 显示全部楼层
lxlxllx89 发表于 2014-4-21 10:54
你去搜搜 grads自定义风场箭头 我记得有脚本的 照着仿就行了 貌似在动力论坛里面有

恩,行~到时候去学习学习
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-21 12:24:17 | 显示全部楼层
sun_shine_Xia 发表于 2014-4-21 10:30
就是想要把箭头画成附图中这样的,我看了下他的example wmex16,发现是一个程序啊~没搞懂

这里面的箭头夹角和箭体粗细有变化,夹角小同时线条粗,看起来就好像是箭头类型发生了变化。你也可以这样试试。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-21 13:36:36 | 显示全部楼层

回帖奖励 +5 金钱

sun_shine_Xia 发表于 2014-4-21 10:21
恩,不错,按照这个就画出来!!!膜拜~~还有个问题,他这个箭头的类型能设置吗?我研究了下wmsetp,wmve ...

给你一个另外的实现方式,供参考!
这个用到了gsn_csm_vector,可以比较灵活地控制箭头的属性。之前用wmvectmap的版本,正如你说的,箭头好像是没有太好的办法进行更改。

dir.png

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"

begin
    lat = -30.
    lon = 90.

    len = .04

    fonthgt = .015

    wks = gsn_open_wks("png", "dir")

; map
    mapres = True
    mapres@gsnDraw = False
    mapres@gsnFrame = False

    plot = gsn_csm_map(wks, mapres)

; arrows
    u = (/(/0., 0., 0./), (/-10, 0., 10./), (/0., 0., 0./)/)
    v = (/(/0., 10., 0./), (/0., 0., 0./), (/0., -10., 0./)/)

    lat2 = lat + (/.01, 0., -.01/)
    lat2@units = "degrees_north"
    lon2 = lon + (/-.01, 0., .01/)
    lon2@units = "degrees_east"

    u!0 = "lat"
    u!1 = "lon"
    u&lat = lat2
    u&lon = lon2
    copy_VarCoords(u, v)

    vectres = True
    vectres@gsnDraw = False
    vectres@gsnFrame = False
    vectres@vcGlyphStyle = "FillArrow"
    vectres@vcFillArrowEdgeColor = "black"
    vectres@vcPositionMode = "ArrowTail"
    vectres@vcRefMagnitudeF = 10.
    vectres@vcRefLengthF = len * .9
    vectres@vcRefAnnoOn = False
    vectplot = gsn_csm_vector(wks, u, v, vectres)

    overlay(plot, vectplot)
    draw(plot)

; text
    xout = 0.
    yout = 0.
    datatondc(plot, lon, lat, xout, yout)

    len2 = len * 1.1

    txtres = True
    txtres@txFontHeightF = fonthgt
    txtres@txJust = "CenterLeft"
    gsn_text_ndc(plot, "3", xout + len2, yout, txtres)
    txtres@txJust = "TopCenter"
    gsn_text_ndc(plot, "6", xout, yout - len2, txtres)
    txtres@txJust = "CenterRight"
    gsn_text_ndc(plot, "9", xout - len2, yout, txtres)
    txtres@txJust = "BottomCenter"
    gsn_text_ndc(plot, "12", xout, yout + len2, txtres)

; circle
    rad = atan(1.0) / 45.
    npts = 361
    xcirc = new(npts, float)
    ycirc = xcirc
    xcirc = xout + len * cos(fspan(0, 360, npts) * rad)
    ycirc = yout + len * sin(fspan(0, 360, npts) * rad)

    gsn_polyline_ndc(wks, xcirc, ycirc, False)

    frame(wks)

end

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

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2014-4-21 14:22:00 | 显示全部楼层
longlivehj 发表于 2014-4-21 13:36
给你一个另外的实现方式,供参考!
这个用到了gsn_csm_vector,可以比较灵活地控制箭头的属性。之前用wm ...

艾玛,好的~太感谢大神了,这个就相当于专门绘制一个这个箭头了~
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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